【问题标题】:making errorbars not clipped in matplotlib with Python使用 Python 在 matplotlib 中制作错误栏
【发布时间】:2011-02-19 23:47:15
【问题描述】:

我在 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] 之外?

谢谢。

【问题讨论】:

    标签: python matplotlib scipy plot


    【解决方案1】:

    在matplotlib中,大部分的细节控制都需要通过Artists来完成。我认为这应该做你想做的:

    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 返回一个元组,其中第二项是错误栏列表。所以在这里我浏览列表并关闭每个错误栏的剪辑。

    【讨论】:

    • 非常好。我实际上尝试了完全相同的事情,但没有看到任何东西,因为我没有正确重绘。
    • 请注意,这只适用于大写字母。如果 bar itelf 被切成两半(正如您在关闭轴时会看到的那样),您也需要对 e[2] 中的所有 b 执行相同的操作。
    【解决方案2】:

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

    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])
    


    (来源:stevetjoa.com

    【讨论】:

    • 不,我希望最后一个刻度线位于 4(在您的示例中),水平 x 轴在此结束,没有任何东西超过它。误差线末端的水平线将略微延伸到 x 轴的末端,但 clip_on=False 应该使那些仍然可见......尽管它们没有。有什么想法可以做到这一点吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多