从Matplotlib中找到异常点:箱线图

13

我正在使用matplotlib的boxplot函数绘制一个非正态分布,并且希望通过boxplot函数找到离群值。

除了这个图,我还想知道我的代码中显示为离群点的数值。是否有任何方法可以从boxplot对象中提取这些值以在下游代码中使用?

2个回答

21
你是指那两条黑线上下的点吗?
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)

enter image description here

存储来自箱线图的返回字典,您可以从中获取所有信息,例如:

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, "+")

enter image description here


1
['fliers']的不同索引中提取异常值的逻辑是什么?为什么0 = above,2 = below?以及为什么get_data()后面要加上[1]?抱歉,我正在尝试在同一图表上动态复制20多个框,并且似乎无法复制,也不想提出类似的问题。 - DJK
3
目前 r["fliers"][2].get_data()[1] 返回 IndexError: list index out of range,而 r["fliers"][0].get_data()[1] 返回上下异常值,因此可以使用它来一次性检索所有异常值。 - pcko1

1

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接