2010-05-15 48 views
5

我使用matplotlib Python中绘制与errorbars如下一行:决策errorbars不matplotlib剪裁与Python

plt.errorbar(xvalues, up_densities, yerr=ctl_sds, fmt='-^', lw=1.2, markersize=markersize, 
     markeredgecolor=up_color, color=up_color, label="My label", clip_on=False) 
plt.xticks(xvalues) 

我使用“xticks”设定在X轴的刻度。但是,xvalues中最后一个点(即xvalues [-1])的误差线会右移 - 这意味着只会出现一半误差条。即使使用clip_on = False选项也是如此。我该如何解决这个问题,以便错误条全部出现,即使他们的右侧技术上在xvalues [-1]之外?

谢谢。

回答

10

在matplotlib,最详细的控制需要通过艺术家来完成。我想这应该做你想要什么:

import matplotlib.pyplot as plt 
from random import uniform as r 

x = range(10) 
e = plt.errorbar(x, [r(2,10) for i in x], [r(.1,1) for i in x], capsize=8, color='r') 

for b in e[1]: 
    b.set_clip_on(False) 

plt.show() 

enter image description here

您遇到的问题是,目前正在使用的clip_on关键字来控制标记,而不是错误吧。为了控制错误条,plt.errorbar返回一个元组,其中第二个项是错误条的列表。所以我在这里通过列表并关闭每个错误栏的裁剪。

+0

非常好。我实际上尝试了完全相同的东西,但没有看到任何东西,因为我没有正确重绘。 – 2010-05-18 05:14:07

+3

请注意,这只适用于上限。如果它自己被削减了一半(就像你在关闭轴时看到的那样),你也需要对e [2]中的所有b执行相同的操作。 – Peter 2015-11-15 11:33:11

+0

@彼得:好点。谢谢。 – tom10 2015-11-15 17:51:08

1

这是你的意思吗?你想重新定义剧情的水平限制吗?

plt.errorbar(range(5), [3,2,4,5,1], yerr=[0.1,0.2,0.3,0.4,0.5]) 
ax = plt.gca() 
ax.set_xlim([-0.5,4.5]) 

Matplotlib errorbar http://up.stevetjoa.com/errorbar.png

+0

不,我希望最后一个刻度线位于4(在您的示例中),水平x轴以此结束,没有任何东西通过它。错误栏末端的水平线将稍微延伸穿过x轴的末端,但clip_on = False应尽可能使它们可见......但它们不会。任何想法我可以做到这一点? – user248237dfsf 2010-05-18 02:58:37