如果未指定轴限制,则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”,但让它决定一个合适的位置?我不能简单地上下舍入数字,因为我的所有数据集都出现在不同的数量级上。
答案 0 :(得分:1)
您可以将data
设为masked array:
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()
答案 1 :(得分: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()