在Matplotlib的boxplot中明确设置盒子的须状长度

时间:2017-05-04 22:34:35

标签: python matplotlib

我想使用boxplot绘制matplotlib数字。

这是我目前的数字: enter image description here

这是生成图形的代码:

pt = plt.boxplot(all_data, sym='+')
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1.0], ['0', '20%', '40%', '60%', '80%', '100%'])
plt.xticks([y + 1 for y in range(len(all_data))], ['WMC', 'DIT', 'CBO', 'RFC', 'LCOM', 'Ca', 'NPM'])
mean = []

for line in pt['medians']:
    x, y = line.get_xydata()[1] # top of median line
    plt.text(x, y, '%.1f' % x,
      horizontalalignment='center') # draw above, centered

plt.savefig("boxplot1.pdf")

箱线图中的框显示数据集的第1,第2和第3四分位数(Q1,中位数和Q3)。对于每个盒子,有一条线(也称为晶须,默认长度为1.5 * IQR(四分位间距))。基本上我正在寻找的不是使用默认值,而是明确设置下限和上限(或胡须长度)到我指定的某个值。

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

要更改箱线图的胡须,请使用whis argument of boxplot

  

whis:浮点数,序列或字符串(默认= 1.5
  作为浮子,确定胡须的距离超出第一和第三四分位数。换句话说,在IQR是四分位数范围(Q3-Q1)的情况下,上部晶须将延伸到小于Q3 + whis*IQR的最后一个数据。类似地,下部晶须将延伸到大于Q1 - whis*IQR的第一个数据。除了晶须之外,数据被视为异常值并被绘制为单个点。将其设置为不合理的高值,以强制晶须显示最小值和最大值。或者,将其设置为百分位数的递增序列(例如,[5, 95])以将胡须设置在数据的特定百分位数处。最后,whis可以是字符串'范围'强迫胡须达到数据的最小值和最大值。