我必须绘制一些数据的箱线图,我可以轻松地使用 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 。
谢谢。
答案 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()}