为什么pandas在非对称误差条的两边应用相同的值?

2da*_*aaa 6 matplotlib pandas

我正在尝试使用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='*')
Run Code Online (Sandbox Code Playgroud)

下限似乎总是符合我的预期,但不是在上限添加值,而是再次添加下限的值.

如何将错误传递到matplotlib以便正确呈现错误栏?

ae3*_*e35 6

简短回答:对非对称误差线使用1x2xN形错误列表.

F.ex. 在当前的例子中使用

errors = [ f.index.values, df['p_hat'].values ]
df['p_hat'].plot(yerr=[errors])
Run Code Online (Sandbox Code Playgroud)

目前在大熊猫导致大熊猫来解释形状2×N个给出了一系列它将解释为一个数据帧的多行的多个错误棒以同样的方式误差线的错误.由于您显然只绘制1行/系列,因此使用错误条列表的第一个元素并将其解释为对称错误.

在大熊猫中修复bug之前,可以通过传递Mx2xN形状的错误来"欺骗"大熊猫使用非对称错误条,就像DataFrame上非对称误差条的预期形状一样.确切地说,您必须使用1x2xN形状列表,可以通过调用f.ex简单地创建.yerr=[ ... ]