9

我正在尝试从这样的 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

如果我指定一个值(不正确),一切都很好。我如何才能真正为每列提供正确的错误栏?

4

2 回答 2

8

你的数据形状是什么?

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

在此处输入图像描述

于 2012-10-23T13:25:25.833 回答
2

如果卢卡斯的回答不起作用

无论出于何种原因,接受的答案对我来说都不起作用(比较我的评论)。我正在使用以下版本

版本: 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()

在此处输入图像描述

于 2020-10-06T14:19:11.720 回答