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

时间:2012-10-23 12:32:19

标签: python matplotlib pandas

我正在尝试从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 个答案:

答案 0 :(得分:6)

您的数据形状是什么?

对于n-by-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()

enter image description here

答案 1 :(得分:0)

如果lucasg的答案不起作用

无论出于何种原因,被接受的答案对我而言均无法正常工作(在此处比较我的评论)。我正在使用以下版本

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

有效的方法是对该question的修改。 讨论的问题还指向不同版本和不对称误差条图可能存在一些问题。

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

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