我正在使用pandas和matplotlib来生成包含大量条形图的条形图.
我知道如何循环选择所选颜色的列表(如何给出pandas/matplotlib条形图自定义颜色).问题是要选择什么颜色,以便我的图形可以很好地打印在纸上(这是一篇研究论文).我最感兴趣的是柱子和选择的颜色之间的足够对比,看起来很舒服.我想要多种颜色而不是灰度或单色调颜色.
是否有任何预定的方案可供人们使用?
我有一个像这样的熊猫数据框:
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
Run Code Online (Sandbox Code Playgroud)
并且我希望生成一个行,其中包含基准测试中策略的平均值,然后绘制它.
目前,我这样做的方式是:
df = df.T
df['average'] = df.apply(average, axis=1)
df = df.T
df.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方法可以避免双重换位?
我试过了:
df.append(DataFrame(df.apply(average)).T)
df.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
这将附加正确的值,但不会正确更新索引并且图形混乱.
澄清.具有双转置的代码的结果是:
这就是我要的.显示基准和政策的平均值,而不仅仅是平均值.如果我能做得更好,我只是好奇.
请注意,图例通常会搞砸.要修复:
ax = df.plot(kind='bar')
ax.legend(patches, list(df.columns), loc='best')
Run Code Online (Sandbox Code Playgroud) 我有一个文件tmp.txt(实际上是bash命令的输出),其条目如下:
...
ammp 0 1.03683
ammp 10 2.69954
ammp 1 1.05712
ammp 11 2.70339
ammp 12 2.70339
ammp 2 1.88586
ammp 3 2.50103
ammp 4 2.64734
ammp 5 2.67462
ammp 6 2.68097
ammp 7 2.68631
ammp 8 2.6904
ammp 9 2.69517
applu 0 0.678798
applu 10 0.922213
applu 1 0.901234
applu 11 0.923596
applu 12 0.923596
applu 2 0.901657
applu 3 0.903176
applu 4 0.908912
applu 5 0.913879
applu 6 0.914885
applu 7 0.915516
applu 8 0.917368
applu 9 0.920753 …Run Code Online (Sandbox Code Playgroud)