2

下面水平条形图中间的错误黑线非常长,即使stds是:

array([  1.14428879e-01,   3.38164768e-01,   5.58287430e-01,
         7.77484276e-01,   9.95380202e-01,   1.58493526e-08,
         8.69720905e-02,   8.64435493e-02,   5.12989176e-03])

在此处输入图像描述

绘制这个的代码是:

  pl.barh(ind,means,align='center',xerr=stds,ecolor='k', alpha=0.3)

为什么是这样?

4

1 回答 1

4

图中的误差线是正确的。以最长的一个为例,其值9.95380202e-01= 0.9953802021.0。当您将N ×1 值数组传递给值时,xerr这些值被绘制为 ± 值,即它们将跨越两倍的长度。所以一个xerrwith 值1.0将跨越2.0单位,从width - 1.0width + 1.0。为避免这种情况,您可以创建一个 2× N数组,其中一行仅包含零,请参见下面的示例。


pyplot.bar()(同样适用于pyplot.barh())的文档中:

细节: xerr 和 yerr 直接传递给errorbar(),因此它们也可以具有 2xN 形状,用于独立指定上下误差。

从以下文档pyplot.errorbar()

xerr/yerr:[标量| N、Nx1 或 2xN 类数组]

如果是标量数、len(N) 类数组对象或 Nx1 类数组对象,则会在相对于数据的 +/- 值处绘制误差线。

如果是形状为 2xN 的序列,则在相对于数据的 -row1 和 +row2 处绘制误差线。


显示错误栏的不同“组合”的示例:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(9)
y = np.random.rand(9) * 10

stds = np.array([1.14428879e-01, 3.38164768e-01, 5.58287430e-01,
                 7.77484276e-01, 9.95380202e-01, 1.58493526e-08,
                 8.69720905e-02, 8.64435493e-02, 5.12989176e-03])

# Create array with only positive errors
pos_xerr = np.vstack((np.zeros(len(stds)), stds))

# Create array with only negative errors
neg_xerr = np.vstack((stds, np.zeros(len(stds))))

#Create array with different positive and negative error
both_xerr = np.vstack((stds, np.random.rand(len(stds))*2))

fig, ((ax, ax2),(ax3, ax4)) = plt.subplots(2,2, figsize=(9,5))

# Plot centered errorbars (+/- given value)
ax.barh(x, y, xerr=stds, ecolor='k', align='center', alpha=0.3)
ax.set_title('+/- errorbars')
# Plot positive errorbars
ax2.barh(x, y, xerr=pos_xerr, ecolor='g', align='center', alpha=0.3)
ax2.set_title('Positive errorbars')
# Plot negative errorbars
ax3.barh(x, y, xerr=neg_xerr, ecolor='r', align='center', alpha=0.3)
ax3.set_title('Negative errorbars')
# Plot errorbars with different positive and negative error
ax4.barh(x, y, xerr=both_xerr, ecolor='b', align='center', alpha=0.3)
ax4.set_title('Different positive and negative error')

plt.tight_layout()

plt.show()

xerr的不同组合

于 2013-08-29T15:23:28.373 回答