【发布时间】:2012-12-15 08:35:45
【问题描述】:
我有一个 pandas 数据框,例如:
In [61]: df = DataFrame(np.random.rand(3,4), index=['art','mcf','mesa'],
columns=['pol1','pol2','pol3','pol4'])
In [62]: df
Out[62]:
pol1 pol2 pol3 pol4
art 0.661592 0.479202 0.700451 0.345085
mcf 0.235517 0.665981 0.778774 0.610344
mesa 0.838396 0.035648 0.424047 0.866920
我想用跨基准的策略平均值生成一行,然后绘制它。
目前,我这样做的方式是:
df = df.T
df['average'] = df.apply(average, axis=1)
df = df.T
df.plot(kind='bar')
有没有避免双重换位的优雅方法?
我试过了:
df.append(DataFrame(df.apply(average)).T)
df.plot(kind='bar')
这将附加正确的值,但不会正确更新索引并且图表会混乱。
澄清。双转置的代码结果是这样的: 这就是我要的。显示政策的基准和平均值,而不仅仅是平均值。我只是好奇我能不能做得更好。
请注意,图例通常是混乱的。修复:
ax = df.plot(kind='bar')
ax.legend(patches, list(df.columns), loc='best')
【问题讨论】:
-
为什么您的数据采用这种结构?当您的列有数字并且您的行有名称时,总是有点可疑。将表格保持为转置格式似乎更有意义。然后,如果你想以另一种方式绘制它,你可以做
d.T.plot()。 -
嗯,在计算机体系结构中,这种类型的图可能是所有研究论文的 99%。条形的高度代表原始 ipc(每个周期的指令)或标准化性能。
-
当然,但我只是指出,如果它更有意义,您可以将数据存储为转置形式,并且仅 plot 以其他方向(通过绘制
df.T而不是df)。
标签: python matplotlib plot pandas