当std()不起作用时,如何从matplotlib图中删除极值

时间:2013-04-19 16:05:39

标签: python numpy matplotlib

我在matplotlib中绘图有问题,但问题可能更多是关于处理numpy数组而不是关于绘图本身 - matplotlib中的解决方案可能更合适!

问题在于:我有两个ndarray,xvalsyvals形状(1000,),被解释为拟合的x和y坐标(它们应该以某个值为中心) )。一些元素(但不是非常少数!)与其他元素相比具有极大的绝对值(乘以1000或更大)。我无法将轴设置为某个固定值的原因是mean(xvals)mean(yvals),它们的标准偏差在图表之间变化很大。

我想用plt.plot(xvals, yvals, '.')之类的东西对点进行二维绘图,对我来说自动设置轴非常重要,这样才能清楚地看到点的主要分布。必须自动完成的原因是我正在做~100个图,并且必须能够重复命名和更改图中的内容。

我已尝试使用plt.axis([mean(xvals) - k * std(xvals), mean(xvals) + k * std(xvals), mean(yvals) - k * std(yvals), mean(yvals) + k * std(yvals)]),尝试使用k的不同值,但似乎没有一个值适用于我的所有情节。

这是两张图片,显示(1)我得到了什么(根本不使用axis(),以及(2)我粗略想要输出的内容:

Wrong... About right...

我希望我提供了足够的信息,请告诉我,否则我会尽力提供!

1 个答案:

答案 0 :(得分:0)

也许你可以使用这样的东西:

x = sorted(xvals)
y = sorted(yvals)
plt.axis([x[.1*len(x)], x[.9*len(x)], y[.1*len(y)], y[.9*len(y)]])

忽略了两边10%的点数。