【问题标题】:Upper/lower limits with matplotlibmatplotlib 的上限/下限
【发布时间】:2013-03-25 18:02:31
【问题描述】:

我想用误差线绘制一些数据点。 其中一些数据点只有上限或下限,而不是误差线。

所以我试图使用索引来区分带有误差线的点和带有上限/下限的点。 但是,当我尝试这样的事情时:

errorbar(x[i], y[i], yerr = (ymin[i], ymax[i]))

我收到错误:

ValueError: In safezip, len(args[0])=1 but len(args[1])=2

这类似于here 的讨论,但我不使用 pandas,但是,阅读其他几句话对我来说真的很有用。

无论如何,我尝试通过以下方式“扭转”错误:

errorbar(x[i], y[i], yerr = [[ymin[i], ymax[i]]], uplims = True)

但结果图不清楚:似乎上限和误差线被绘制在一起,或者上限被绘制了两次......

目标是在上下误差条不对称时绘制上下限,因此我可以选择箭头之前的条的长度作为上限/下限。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    这实际上是让我对 errorbar 感到恼火的事情之一:它对输入的形状和维度非常挑剔。

    我假设您想要“误差线”,但希望它们的位置由绝对上下限设置,而不是由对称的“误差”值设置。

    errorbar 的作用是将 y 数组和 yerr[0] 压缩在一起(使用 safezip)作为下限(yerr[1] 用于上限)。所以你的yyerr[0](和[1])应该是具有相同大小、形状和维数的数组。 yerr 本身根本不需要是一个数组。

    如果 x、y、ymin 和 ymax 都是一维数组,那么您拥有的第一个代码工作,这就是它们应该的样子。听起来你的 y 不是。

    但是,请务必注意,由于 errorbar yerr 是误差量,而不是绝对限制,因此您需要在实际下限和上限中加上和减去 y。

    例如:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.array([1,2,3,4])
    y = np.array([1,2,3,4])  
    ymin = np.array([0,1,2,3])
    ymax = np.array([3,4,5,6])
    ytop = ymax-y
    ybot = y-ymin
    
    # This works
    plt.errorbar(x, y, yerr=(ybot, ytop) )
    

    如果我误解了任何内容,请告诉我。如果您能以您正在使用的形式发布一些示例数据,那就太好了。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2023-03-03
      • 2013-09-22
      相关资源
      最近更新 更多