matplotlib “groupby”后的Pandas“yerr”生成“转换错误”

ckx4rj1h  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(181)

我尝试使用pandas.plot(type=bar)来绘制一个有错误的条形图。我为每个样本设置了一些变量,每个样本属于一个组。玩具示例:

df=pd.DataFrame({
    'U':   [ 1, 2, 3, 4 ], 
    'V':   [ 5, 6, 7, 8 ], 
    'grp': [ 1, 1, 2, 2 ]     })

我为每组创建了平均值和标准差,如下所示:

uv_agg = df.groupby('grp').agg([mean, std])

生成的表具有格式

U           V 
       mean  std   mean  std
grp
1
2

我可以使用

uv_agg.plot( kind='bar', y=('U','mean') )  # works!

但当我用误差线

uv_agg.plot( kind='bar', y=('U','mean'), yerr=('U','std') )

我得到

ConversionError: Failed to convert value(s) to axis units: array(['U', 'std'], dtype='<U6')

我试过逐步通过情节代码,但不能让它工作。

qqrboqgw

qqrboqgw1#

参数y接受“标签、位置或标签、位置列表”,这就是y=('U','mean')工作的原因。然而,参数yerr接受“ Dataframe 、系列、类似数组、dict和str”,因此(例如)您可以使用uv_agg['U']['std']

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.DataFrame({'U': [1, 2, 3, 4],
                   'V': [5, 6, 7, 8],
                   'grp': [1, 1, 2, 2]
                   })

uv_agg = df.groupby('grp').agg([np.mean, np.std])
uv_agg.plot(kind='bar', y=('U', 'mean'), yerr=uv_agg['U']['std'], capsize=4, rot=0)
plt.show()

您可以在Panda's plotting docs和使用误差线绘图中找到更多信息。

相关问题