![](/img/trans.png)
[英]Adding Vertical Line styles to a matplotlib legend to a plot made from a dataframe
[英]Graphing a dataframe line plot with a legend in Matplotlib
我正在处理一个具有成绩和州的数据集,需要按州创建折线图,以显示每个州的学生落入哪些垃圾箱的百分比。
我的方法(到目前为止)如下:首先我导入数据集:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
records = [{'Name':'A', 'Grade':'.15','State':'NJ'},{'Name':'B', 'Grade':'.15','State':'NJ'},{'Name':'C', 'Grade':'.43','State':'CA'},{'Name':'D', 'Grade':'.75','State':'CA'},{'Name':'E', 'Grade':'.17','State':'NJ'},{'Name':'F', 'Grade':'.85','State':'HI'},{'Name':'G', 'Grade':'.89','State':'HI'},{'Name':'H', 'Grade':'.38','State':'CA'},{'Name':'I', 'Grade':'.98','State':'NJ'},{'Name':'J', 'Grade':'.49','State':'NJ'},{'Name':'K', 'Grade':'.17','State':'CA'},{'Name':'K', 'Grade':'.94','State':'HI'},{'Name':'M', 'Grade':'.33','State':'HI'},{'Name':'N', 'Grade':'.22','State':'NJ'},{'Name':'O', 'Grade':'.7','State':'NJ'}]
df = pd.DataFrame(records)
df.Grade = df.Grade.astype(float)
接下来我将每个年级切成一个垃圾箱
df['bin'] = pd.cut(df['Grade'],[-np.inf,.05,.1,.15,.2,.25,.3,.35,.4,.45,.5,.55,.6,.65,.7,.75,.8,.85,.9,.95,1],labels=False)/10
然后我创建了一个数据透视表,让我按每个州的 bin 统计人数
df2 = pd.pivot_table(df,index=['bin'],columns='State',values=['Name'],aggfunc=pd.Series.nunique,margins=True)
df2 = df2.fillna(0)
然后我将这些 n 计数转换为百分比并删除边距行
df3 = df2.div(df2.iloc[-1])
df3 = df3.iloc[:-1,:-1]
现在我想用 x 轴上的 bin 和 Y 轴上的百分比创建一个带有多条线(每个州一条)的折线图。 df3.plot() 会给我我想要的图表,但我想使用 matplotlib 完成同样的事情,因为它为我提供了更好的图表定制。 然而,运行
plt.plot(df3)
给了我我需要的台词,但我无法让图例正常工作。 关于如何实现这一点的任何想法?
你可以这样做:
plt.plot(df3,label="label")
plt.legend()
plt.show()
欲了解更多信息,请访问这里
如果它可以帮助您解决问题,请不要忘记将其标记为已接受的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.