如何设置误差棒帽的线宽

49

Matplotlib中如何改变误差棒顶部的线条宽度?

我尝试了以下代码:

(_, caplines, _) = matplotlib.pyplot.errorbar(
    data['distance'], data['energy'], yerr=data['energy sigma'],
    capsize=10, elinewidth=3)

for capline in caplines:
    capline.set_linewidth(10)
    capline.set_color('red')

pp.draw()

很遗憾,这会更新帽子的颜色,但是不会更新帽子的线条宽度!

结果效果类似于以下图片中的“粗误差线条/细帽子”: enter image description here

在这种情况下,拥有“粗”杆帽子会很好; 在Matplotlib中如何实现呢?手动使用plot()一一绘制杆帽将起作用,但最好使用更简单的替代方案。

2个回答

41

你很接近了,只是行末符号(End of Line)的问题。

distance = [1,3,7,9]
energy = [10,20,30,40]
sigma = [1,3,2,5]

(_, caps, _) = plt.errorbar(distance, energy, sigma, capsize=20, elinewidth=3)

for cap in caps:
    cap.set_color('red')
    cap.set_markeredgewidth(10)

plt.show

在此输入图像描述

set_markeredgewidth 用于设置端点线的宽度。

Matplotlib 对象具有众多属性,往往难以记住给定对象的正确属性。IPython 是一个非常有用的工具,可以用于自省 matplotlib。我使用它来分析对应于误差端点线的 2D 线条的属性,并发现了其他标记属性。

干杯!


非常感谢!我们使用了相同的方法,但是我不知道set_markeredgewidth。所以,这些帽子实际上是Matplotlib的标记,而不是2D线条。在我看来,errorbar()函数的capsize参数等同于cap.set_markersize(),因此后者可以被删除,对吗? - Eric O. Lebigot
当你在评论时,我也意识到了这一点。我还更改了图片。 - joaquin
@joaquin,你如何使用iPython来“introspecting matplotlib”?这听起来像是一个非常有用的技能。 - Blink
1
使用IPython并加上--pylab选项,可以设置一个与matplotlib交互绘图的环境。同时,您可以在任何“object.”处按<TAB>键以列出其方法,并使用“object.method?”检查所选方法的文档。通过这种方式,您可以在活体中检查给定属性的更改如何影响您的图形。 - joaquin
使用 bar 绘制带有误差线的条形图时,我不知道该怎么做。 - abcd

32
这基于@joaquin的答案,但更为简洁(如果您只想使用普通的错误大写而没有特殊样式):
distance = [1,3,7,9]
energy = [10,20,30,40]
sigma = [1,3,2,5]

plt.errorbar(distance, 
    energy, 
    sigma, 
    capsize=5, 
    elinewidth=2,
    markeredgewidth=2)

输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接