【发布时间】:2020-12-25 03:52:43
【问题描述】:
我想绘制两个数据框以比较结果。我的第一选择是仅根据两个数据框中的一列绘制折线图。
df
Name Surname P R F
0 B N 0.41 0.76 0.53
1 B L 0.62 0.67 0.61
2 B SV 0.63 0.53 0.52
3 B SG 0.43 0.61 0.53
4 B R 0.81 0.51 0.53
5 T N 0.32 0.82 0.53
6 T L 0.58 0.69 0.62
7 T SV 0.67 0.61 0.64
8 T SG 0.53 0.63 0.57
9 T R 0.74 0.48 0.58
和
data = [['B','N',0.41,0.72,0.51],
['B','L',0.66,0.67,0.62],
['B','SV',0.63,0.51,0.51],
['B','SG',0.44,0.63,0.51],
['B','R',0.81,0.51,0.62],
['T','N',0.33,0.80,0.47],
['T','L',0.58,0.61,0.63],
['T','SV',0.68,0.61,0.64],
['T','SG',0.53,0.63,0.57],
['T','R',0.74,0.48,0.58]]
df1 = pd.DataFrame(data, columns = ['Name','Surname','P','R','F'])
我想根据 F 值创建一个图,保留 B/T 和 R、N、L、SV、SG 的信息(在图例/标签中)。
我尝试过使用条形图,但这没有考虑标签/图例。
我正在寻找这样的东西:
fig, ax = plt.subplots()
ax2 = ax.twinx()
df.plot(x="Name", y=["F"], ax=ax)
df1.plot(x="Name", y=["F"], ax=ax2, ls="--")
但是这缺少标签和图例。
我也尝试过:
ax = df.plot()
l = ax.get_lines()
df1.plot(ax=ax, linestyle='--', color=(i.get_color() for i in l))
但我无法区分姓名、姓氏和数据框(在 x 轴上应该有姓氏)。 也可以单独绘制值(P、R 和 F),如下所示:
ax = df[['P']].plot()
l = ax.get_lines()
df1[['P']].plot(ax=ax, linestyle='--', color=(i.get_color() for i in l))
我应该根据姓名和姓氏比较两个地块的 F 值。 任何帮助将不胜感激。
【问题讨论】:
-
也许使用
fig.legend..
标签: python matplotlib