使用Python中的Matplotlib使误差条不被裁剪

7

我正在使用Python中的matplotlib绘制带有误差线的折线图,如下所示:

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]之外?谢谢。
2个回答

13
在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()

在此输入图片描述

你遇到的问题是clip_on关键字用于控制标记而不是误差条。为了控制误差条,plt.errorbar返回一个元组,其中第二项是误差条的列表。所以我遍历这个列表并关闭每个误差条的剪辑。


非常好。我实际上尝试了完全相同的事情,但是由于我没有正确地重新绘制,所以什么也没看到。 - Steve Tjoa
7
请注意,这仅适用于大写字母。如果横杠本身被切成两半(当您关闭轴时会看到),您需要对e[2]中的所有b执行相同操作。 - Peter

0

这是您的意思吗?您想重新定义绘图的水平限制吗?

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
(来源: stevetjoa.com)


不,我希望最后一个刻度标记在4处(以您的示例为准),水平x轴在那里结束,没有超过它的东西。误差线两端的水平线会稍微延伸到x轴的末端,但clip_on=False应该使它们仍然可见...虽然它们并没有。有什么办法可以做到这一点吗? - user248237

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