我正在尝试从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
如果我指定一个值(不正确),一切都很好。我怎样才能真正为每列提供正确的错误栏?
答案 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()
答案 1 :(得分:0)
无论出于何种原因,被接受的答案对我而言均无法正常工作(在此处比较我的评论)。我正在使用以下版本
版本: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()