我正在尝试使用以下代码使用pandas和matplotlib绘制具有不对称误差线的序列:

d = {'high_delta': {1: 0.6,
  2: 0.1,
  3: 0.2,
  4: 0.1,
  5: 0.1,
  6: 0.1,
  7: 0.1,
  8: 0.1,
  9: 0.2,
  10: 0.1},
 'low_delta': {1: 0.2,
  2: 0.1,
  3: 0.1,
  4: 0.1,
  5: 0.1,
  6: 0.1,
  7: 0.1,
  8: 0.1,
  9: 0.1,
  10: 0.4},
 'p_hat': {1: 0.2,
  2: 0.1,
  3: 0.3,
  4: 0.3,
  5: 0.1,
  6: 0.3,
  7: 0.2,
  8: 0.2,
  9: 0.1,
  10: 0.8}}

df = pandas.DataFrame(d)
 df['p_hat'].plot(yerr=df[['low_delta', 'high_delta']].T.values)
(df.p_hat + df.high_delta).plot(style='.')
(df.p_hat - df.low_delta).plot(style='*')

下限似乎总是与我期望的相匹配,但是似乎没有在上限上添加值,而是在下限上再次添加了值。

错误应该如何传递到matplotlib中,以便正确显示错误栏?

最佳答案

简短答案:对于非对称误差线,使用1x2xN形状的误差列表。

F.ex.在当前示例中使用

errors = [ f.index.values, df['p_hat'].values ]
df['p_hat'].plot(yerr=[errors])

当前,Pandas中存在一个错误,该错误会导致Pandas解释一系列形状为2xN的错误条,其解释方式与解释DataFrame的多行的多个错误条的方式相同。由于显然只绘制了1行/系列,因此仅使用误差线列表的第一个元素并将其解释为对称误差。

bug固定在 Pandas 中之前,可以通过传递Mx2xN形状的错误来诱骗 Pandas 使用非对称错误条,就像DataFrames上非对称错误条所期望的形状一样。确切地说,您必须使用1x2xN形状的列表,可以通过调用f.ex轻松创建该列表。 yerr=[ ... ]

关于matplotlib - 为什么 Pandas 在不对称误差线的两边都应用相同的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26793758/

10-12 18:19