从matplotlib中的bar对象中检索yerr值

时间:2017-07-03 06:11:17

标签: matplotlib subplot

如何从ax.bar对象中检索yerr值? 使用单行创建条形图,ax.bar()的每个参数都是一个集合,包括yerr值。

bar_list = ax.bar(x_value_list, y_value_list, color=color_list,
                  tick_label=columns, yerr=confid_95_list, align='center')

稍后,我希望能够检索图表中每个条形的y值和yerr值。 我遍历bar_list集合,我可以检索y值,但我不知道如何检索yerr值。

获取y值如下所示:

for bar in bar_list:
    y_val = bar.get_height()

我怎样才能得到yerr?是否有类似bar.get_yerr()方法的东西? (它不是bar.get_yerr()) 我希望能够:

for bar in bar_list:
    y_err = bar.get_yerr()

1 个答案:

答案 0 :(得分:3)

请注意,在上面的示例中,confid_95_list 已经是错误列表。所以没有必要从情节中获得它们。

要回答这个问题:在for bar in bar_list行中,barRectangle,因此没有与之关联的错误栏。

但是bar_list是一个带有属性errorbar的条形容器,其中包含错误栏创建的返回。然后,您可以获取行集合的各个段。每行从yminus = y - y_erroryplus = y + y_error;线集仅存储点yminusyplus。举个例子:

means = (20, 35)
std = (2, 4)
ind = np.arange(len(means))   

p = plt.bar(ind, means, width=0.35, color='#d62728', yerr=std)

lc = [i for i in p.errorbar.get_children() if i is not None][0]
for yerr in lc.get_segments():
    print (yerr[:,1]) # print start and end point
    print (yerr[1,1]- yerr[:,1].mean()) # print error

将打印

[ 18.  22.]
2.0
[ 31.  39.]
4.0

因此,这适用于对称错误栏。对于非对称错误栏,您还需要考虑点本身。

means = (20, 35)
std = [(2,4),(5,3)]
ind = np.arange(len(means))   

p = plt.bar(ind, means, width=0.35, color='#d62728', yerr=std)

lc = [i for i in p.errorbar.get_children() if i is not None][0]
for point, yerr in zip(p, lc.get_segments()):
    print (yerr[:,1]) # print start and end point
    print (yerr[:,1]- point.get_height()) # print error

将打印

[ 18.  25.]
[-2.  5.]
[ 31.  38.]
[-4.  3.]

最后,这似乎不必要地复杂化,因为您只检索最初放入的值,meansstd,您只需将这些值用于您想要做的任何事情。