我正在使用matplotlib的boxplot函数绘制一个非正态分布,并且希望通过boxplot函数找到离群值。
除了这个图,我还想知道我的代码中显示为离群点的数值。是否有任何方法可以从boxplot对象中提取这些值以在下游代码中使用?
我正在使用matplotlib的boxplot函数绘制一个非正态分布,并且希望通过boxplot函数找到离群值。
除了这个图,我还想知道我的代码中显示为离群点的数值。是否有任何方法可以从boxplot对象中提取这些值以在下游代码中使用?
from pylab import *
spread= rand(50) * 100
center = ones(25) * 50
flier_high = rand(10) * 100 + 100
flier_low = rand(10) * -100
data =concatenate((spread, center, flier_high, flier_low), 0)
r = boxplot(data)
存储来自箱线图的返回字典,您可以从中获取所有信息,例如:
top_points = r["fliers"][0].get_data()[1]
bottom_points = r["fliers"][2].get_data()[1]
plot(np.ones(len(top_points)), top_points, "+")
plot(np.ones(len(bottom_points)), bottom_points, "+")
matplotlib的pyplot.boxplot()
函数返回一个包含箱线图各种属性的字典。异常值存储在该字典的fliers
键中。
假设调用plt.boxplot()
被存储在变量bplot
中,
# retrieving outliers for vertical boxplot
outliers = bplot["fliers"][0].get_ydata()
# retreiving outliers for horizontal boxplot
outliers = bplot["fliers"][0].get_xdata()
['fliers']
的不同索引中提取异常值的逻辑是什么?为什么0 = above,2 = below?以及为什么get_data()
后面要加上[1]?抱歉,我正在尝试在同一图表上动态复制20多个框,并且似乎无法复制,也不想提出类似的问题。 - DJKr["fliers"][2].get_data()[1]
返回IndexError: list index out of range
,而r["fliers"][0].get_data()[1]
返回上下异常值,因此可以使用它来一次性检索所有异常值。 - pcko1