使用pandas绘制带误差条的条形图

10

我想从这样的DataFrame生成条形图:

            Pre    Post
 Measure1   0.4    1.9

这些值是我从其他地方计算出的中位数,并且我还有它们的方差和标准偏差(以及标准误差)。我想将结果绘制成带有正确误差线的条形图,但指定多个错误值给yerr会产生异常:

# Data is a DataFrame instance
fig = data.plot(kind="bar", yerr=[0.1, 0.3])

[...]
ValueError: In safezip, len(args[0])=1 but len(args[1])=2
如果我指定了一个单一的值(不正确的),一切都很好。我该如何为每个列指定其正确的误差线呢?
2个回答

12

你的数据形状是什么?

对于一个n行1列的数据向量,你需要一个n行2列的误差向量(正误差和负误差):

import pandas as pd 
import matplotlib.pyplot as plt

df2 = pd.DataFrame([0.4, 1.9])
df2.plot(kind='bar', yerr=[[0.1, 3.0], [3.0, 0.1]])

plt.show()

输入图片描述


形状为1行2列。我尝试使用我的数据进行了上述操作,但仍出现错误。 - Einar
你能否像上面那样将矩阵展平成向量?无论如何,我深入研究了pandas.DataFrame.plot,但没有找到绘制矩阵数据误差条的方法。你可能需要退回到mathplotlib:MatplotlibBarPlots - lucasg
我通过转置矩阵运气更好:这样它就可以工作了。 - Einar
我注意到在使用Pandas v1时,我可以将yerr传递给plot,但是我必须使用.values来删除索引(即使索引与正在绘制的内容匹配)。传入一个(2, N)数组也可以正常工作。 - Ian Ozsvald
2
我有点困惑,[3.0, 0.1] 这些值是用来做什么的?errorbar 只是由 [0.1, 3.0] 确定的。 - Markus Dutschke

3

如果lucasg的答案不起作用

出于某种原因,接受的答案对我来说没有正常工作(请查看我的评论)。我正在使用以下版本:

版本:Python 3.7.6(anaconda),mpl:3.1.3,pd:1.0.1,np:1.18.1

然而,有效的方法是修改了这个问题。该问题的讨论指向不同版本和不对称误差条绘图可能存在一些问题。

代码 绘制数据框列均值周围从最小到最大的不对称误差线。

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
print('Versions, mpl: {:}, pd: {:}, np: {:}'.format(mpl.__version__, pd.__version__, np.__version__))

df = pd.DataFrame()
df['a'] = [1, 1, 2, 3, 3]
df['b'] = [0.5, 0.5, 2, 3, 4]
print(df)

plt.bar(np.arange(df.shape[1]), df.mean(), yerr=[df.mean()-df.min(), df.max()-df.mean()], capsize=6)
plt.grid()

plt.show()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接