2

当没有指定坐标轴限制时,matplotlib 选择默认值作为很好的整数,低于和高于要绘制的列表中的最小值和最大值。

有时我的数据中有异常值,我不希望在选择轴时包含它们。我可以检测到异常值,但我不想实际删除它们,只是让它们超出绘图区域。我尝试将轴设置为列表中不包括异常值的最小值和最大值,但这意味着这些值正好位于轴上,并且绘图的边界与股票点不对齐。

有没有办法指定轴限制应该在某个范围内,但让 matplotlib 选择一个合适的点?

例如,以下代码生成了一个漂亮的图,其中 y 轴范围自动设置为 (0.140,0.165):

from matplotlib import pyplot as plt
plt.plot([0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636])
plt.show()

从第一个代码示例中绘制。

在数据中引入异常值并手动设置限制后,y 轴限制设置为略低于 0.145 和略高于 0.160 - 几乎没有那么整洁。

from matplotlib import pyplot as plt
plt.plot([0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636])
plt.ylim(0.142921640661, 0.160337332636)
plt.show()

从第二个代码示例绘制。

有没有办法告诉 matplotlib 在设置限制时忽略异常值,或者将轴设置为“低于 0.142921640661”和“高于 0.160337332636”,但让它决定一个合适的位置?我不能简单地将数字上下四舍五入,因为我所有的数据集都出现在不同的数量级上。

4

2 回答 2

1

你可以让你data蒙面数组

from matplotlib import pyplot as plt
import numpy as np

data = [0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636]
data = np.ma.array(data, mask=False)
data.mask = data>0.16
plt.plot(data)
plt.show()

在此处输入图像描述

于 2013-05-14T13:17:45.863 回答
0

unutbu 实际上给了我一个解决问题的想法。这不是最有效的解决方案,所以如果有人有任何其他想法,我会全力以赴。

编辑:我最初是像 unutbu 所说的那样屏蔽数据,但这实际上并没有正确设置轴。我必须从数据中删除异常值。

从数据中去除异常值后,可以绘制剩余值并获得 y 轴范围。然后可以再次绘制具有异常值的数据,但从第一个图中设置限制。

from matplotlib import pyplot as plt

data = [0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636]
cleanedData = remove_outliers(data) #Function defined by me elsewhere.
plt.plot(cleanedData)

ymin, ymax = plt.ylim()
plt.clf()
plt.plot(data)
plt.ylim(ymin,ymax)
plt.show()
于 2013-05-15T05:22:30.840 回答