我有CSV数据代表一组实验样本。我一直在使用pandas pivot_table功能来总结这些数据(hmean)。我可以使用pyplot轻松地绘制这些数据。
我想在标准偏差方面添加错误栏。我可以向pivot_table添加一个std计算但是我无法弄清楚如何绘制它。
示例数据:
Version,Cores,Rate
B, 24, 17284.202851
B, 24, 16978.950593
B, 24, 17420.640853
B, 24, 18459.647352
B, 24, 18432.847955
A, 24, 8718.459497
A, 24, 8709.560992
A, 24, 8712.219874
A, 24, 8697.659670
A, 24, 8687.926290
B, 48, 21478.308781
B, 48, 21478.500370
B, 48, 21459.274459
B, 48, 21479.346576
B, 48, 21443.547086
A, 48, 17706.794211
A, 48, 17840.683281
A, 48, 17728.789484
A, 48, 17677.580304
A, 48, 17834.253133
枢转:
import pandas as pd
import scipy.stats as sp
# read in the data
samples=pd.read_csv(sys.stdin)
aggfunc=[sp.hmean]
summary=pd.pivot_table(samples, index='Cores', values='Rate',
columns=['Version'],
aggfunc=aggfunc)
print(summary)
绘图:
import matplotlib
import matplotlib.pyplot as plt
ax=summary.plot(logx=True, grid=True, style='o-', fontsize=10)
ax.set_xticks(summary.index)
ax.set_xticklabels(summary.index)
plt.savefig("fig.pdf")
如果我能将它作为散点图也会很好,但是现在只需要获得误差条就足够了。
答案 0 :(得分:0)
我遇到了类似的问题,并且看起来pandas不支持直接从pivottable绘制错误栏。但是,您可以使用groupby
:
means = samples.groupby('Cores').means()
errors = samples.groupby('Cores').errors()
means.plot.bar(yerr=errors)
这对我来说有一组类似的实验结果,我希望按类别分组。以上内容与pandas documentation中给出的示例非常相似。您可能需要进行修改才能使用hmean()
代替mean()
。