Pandas 在同一张图上绘制三个数据帧

Pandas plot three dataframes on the same figure

我尝试了很多不同的解决方案,但似乎无法解决问题。 我有九个数据框(每个 3 个描述一个系统):

df = pd.read_csv('purged_0.csv', sep=',', header=6, usecols=['Location', 'TOTAL', 'Unnamed: 19'])
df2 = pd.read_csv('purged_1.csv', sep=',', header=6, usecols=['Location', 'TOTAL', 'Unnamed: 19'])
df3 = pd.read_csv('purged_2.csv', sep=',', header=6, usecols=['Location', 'TOTAL', 'Unnamed: 19'])
...
df9 = pd.read_csv('purged_8.csv', sep=',', header=6, usecols=['Location', 'TOTAL', 'Unnamed: 19'])

看起来像这样:

               TOTAL_x  Unnamed: 19_x   TOTAL_y  Unnamed: 19_y     TOTAL  Unnamed: 19  total_mean  error_mean
Location                                                                                                 
LEU 455  -2.000507       0.043331 -1.822317       0.037883 -1.818721     0.030111   -1.880515    0.037108
PHE 456  -1.956130       0.041076 -2.305222       0.033210 -2.281509     0.042238   -2.180954    0.038842
ALA 475  -1.493856       0.085664 -2.950011       0.053675 -1.387676     0.068704   -1.943848    0.069348
GLY 476  -0.941795       0.079101 -2.383338       0.056897 -0.871813     0.062222   -1.398982    0.066073
PHE 486  -2.999369       0.081517 -3.688329       0.074005 -2.439233     0.093345   -3.042310    0.082956
ASN 487  -0.828214       0.080111  0.497831       0.029272 -0.969843     0.130934   -0.433409    0.080106
GLN 493  -1.323107       0.152173 -1.902454       0.121394 -2.320519     0.131299   -1.848694    0.134955
GLY 496  -0.603422       0.094210  0.069107       0.009226  0.120265     0.015929   -0.138017    0.039788
GLN 498  -2.692248       0.163207 -0.345707       0.051059 -1.610146     0.135108   -1.549367    0.116458
PRO 499  -0.256722       0.016657  0.042420       0.020137 -0.198196     0.011229   -0.137499    0.016008
THR 500  -0.650186       0.099639 -0.862829       0.113726 -0.996115     0.093840   -0.836377    0.102402
ASN 501  -3.513380       0.093578 -3.364489       0.090704 -4.055331     0.081724   -3.644400    0.088669
GLY 502  -1.011485       0.042847 -0.848697       0.054364 -0.712001     0.046970   -0.857395    0.048060
VAL 503  -0.680188       0.046426 -0.825084       0.082318 -0.635653     0.034014   -0.713642    0.054252
TYR 505  -1.868647       0.089418 -2.091676       0.084795 -1.777963     0.089681   -1.912762    0.087965

然后我将它们 3 乘 3 合并(argv 只是我用来更正标签的数字,没什么大不了的):

merge1 = pd.merge(df, df2, how='inner', on='Location')
merge2 = pd.merge(merge1, df3, how='inner', on='Location')
merge2 = merge2.loc[(df['TOTAL'] <= -0.25) & df['Location'].str.startswith("L")]
merge2.dropna(how='all', inplace=True)
merge2.set_index('Location', inplace=True)
merge2.index = merge2.index.str.split()
merge2.index = merge2.index.str[1] + ' ' + ((merge2.index.str[2].astype(int)) + int(sys.argv[10]) - 1).astype(str)
merge2['total_mean'] = merge2[['TOTAL_x', 'TOTAL_y', 'TOTAL']].mean(axis=1)
merge2['error_mean'] = merge2[['Unnamed: 19_x', 'Unnamed: 19_y', 'Unnamed: 19']].mean(axis=1)

我可以通过以下方式正确地绘制它们:

concat = pd.concat([merge2,merge4,merge6])
pd.DataFrame.plot(concat)
plt.show()

但是因为是比较,所以我想把所有的东西都画在同一个图上(像这样):

到目前为止,我已经尝试连接不同的数据帧,也尝试了 pyplot,并尝试了 pandas.DataFrame.plot:

plt.bar(merge2.index, merge2['total_mean'])
plt.bar(merge4.index, merge4['total_mean'])
plt.bar(merge6.index, merge4['total_mean'])

test = pd.merge(merge2, merge4, how='inner', on='Location')
test.plot(y='total_mean', kind='bar', yerr='error_mean', legend=False)

但是没有用。

我想绘制三个独立的合并数据帧(merged2(即(df+df2)+df3,merged4(df4+df5)+df6,merged6(df7+df8)+df9)只显示'total_mean' 列并使用 'error_mean' 作为错误栏。

我可以让它与一个一起工作,并且我可以独立地绘制它们,但是如果我试图让它们共享 y 轴,那将是一场彻底的灾难。

感谢您的帮助!

卢多维科

我简单地通过放置一个颜色数组来解决...它没有在任何地方指定但是当你连接时你可以通过添加一个像 color=['r', 'g' 这样的数组来保持原始颜色, 'b']). 这是我使用的修改,以防有人知道:

    concat = pd.concat(merged_data_frames, axis=0, sort=True)
    concat = concat.sort_index(key=lambda x: x.str.split().str[1].str.zfill(5))
    concat.plot(kind='bar', y='total_mean', use_index=True, yerr='error_mean', edgecolor='black', color=['r', 'g', 'b'])