【发布时间】:2021-03-26 23:57:28
【问题描述】:
我创建了一个函数,试图在数据框中绘制一些值的平均值条。我遇到麻烦的地方是为每个条形图添加相应的错误。我似乎无法理解如何正确使用 yerr 参数。
def env_mean_concat(dataframe_name, title_name, max_score):
x = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].mean().rename('Environment 1')
y = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].mean().rename('Environment 2')
plot = pd.concat([x, y], axis=1).plot(kind = "bar", yerr=1) #yerr=env_std_dev(dataframe_name).values.T)
plot.set_title("Mean of " + title_name)
plot.set_xlabel("Questions")
plot.set_ylabel("Score")
plot.set_ylim(0, max_score)
我还做了一个返回数据标准差的函数
def env_std_dev(dataframe_name):
std_1 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].std()
std_2 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].std()
return std_1, std_2
在图片中您可以看到情节,但为了演示目的,使用 yerr=1。
我该怎么做才能让 std_1 成为蓝色条上的错误条,而 std_2 成为橙色条上的错误?
【问题讨论】:
-
您有数据样本吗? x轴代表什么?我觉得你可以更轻松地组织你的数据以获得你想要的东西(例如
groupby('environment').agg('mean', 'std').plot())。你也可以看看 seaborn 图书馆 -
argument
yerr接受一个值、一个列表或一个数组,这就是您应该提供的。在您的情况下,这可能是两个值的列表,然后 matplotlib 假定第一个用于所有蓝色条,第二个用于其余的。或者两个列表的列表,每三个值,所以每个栏都有自己的错误栏。但正如 cripcate 所说 - 你的方法相当非传统。也许有更好的方法来实现所需的绘图,但您必须为此提供数据结构。
标签: python pandas dataframe matplotlib errorbar