获取箱形图的数据 - Matplotlib

时间:2014-04-28 19:31:22

标签: python matplotlib boxplot

我必须绘制一些数据的箱线图,我可以轻松地使用 Matplotlib 。但是,我被要求提供一个表格,其中列出了数据,如胡须,中位数,标准偏差等。

我知道我可以“手动”计算这些,但我也从参考文献知道boxplot方法:

Returns a dictionary mapping each component of the boxplot to a list of the matplotlib.lines.Line2D instances created. That dictionary has the following keys (assuming vertical boxplots):

boxes: the main body of the boxplot showing the quartiles and the median’s confidence intervals if enabled.
medians: horizonal lines at the median of each box.
whiskers: the vertical lines extending to the most extreme, n-outlier data points.
caps: the horizontal lines at the ends of the whiskers.
fliers: points representing data that extend beyone the whiskers (outliers).

所以我想知道如何获得这些值,因为它们 matplotlib.lines.Line2D

谢谢。

1 个答案:

答案 0 :(得分:4)

正如您所知,您需要访问boxplot返回值的成员。

即,例如,如果您的返回值存储在bp

bp['medians'][0].get_ydata()

>> array([ 2.5,  2.5])

由于箱线图是垂直的,因此中线是水平线,你只需要关注其中一个y值;即我的样本数据的中位数是2.5。

对于每个"键"在字典中,值将是一个处理多个框的列表。如果您只有一个箱图,则列表中只有一个元素,因此我使用上面的bp['medians'] [0] 。 如果您的箱线图中有多个方框,则需要使用例如迭代方法对其进行迭代。

for medline in bp['medians']:
    linedata = medline.get_ydata()
    median = linedata[0]
不幸的是,由于不同的元素表现不同,因此朱的答案并不起作用。例如,只有一个中位数,但有两个胡须......因此,如上所述,手动处理每个数量是最安全的。

NB你最接近的是以下几点;

res  = {}
for key, value in bp.items():
    res[key] = [v.get_data() for v in value]

或等效

res = {key : [v.get_data() for v in value] for key, value in bp.items()}