【问题标题】:Explicitly set the whisker lengths of a box in boxplot of Matplotlib在 Matplotlib 的箱线图中显式设置框的胡须长度
【发布时间】:2017-10-03 06:38:47
【问题描述】:

我想使用matplotlib 绘制boxplot 图形。

这是我现在的图:

这是生成图形的代码:

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(四分位间距))。所以基本上我要寻找的不是使用默认值,而是明确设置下限和上限(或晶须长度)为我指定的某个值。

有人能解释一下吗?

【问题讨论】:

  • 什么是 Q1,这不会给你 7 个不同的范围吗?或者,如果您选择第一个栏,则第二个栏将被剪掉。这是你想要的吗?您可能需要更新问题并将Q1 +/- 1.5 * IQR 替换为可以理解的内容。
  • 无论如何,如果不将问题分成两部分,(1) 得到四分位数,(2) 设置 ylimit,你会让每个人都更难。 this question 的重复,与 this question 结合。另见this question
  • @ImportanceOfBeingErnest 您好,谢谢您的信息。对于每个框,顶部有一行(默认情况下应该等于Q1+1.5*IQR?),底部有另一行。所以基本上我正在寻找的不是使用默认值,而是明确地将顶线和底线设置到某个值。我清楚吗?
  • @ImportanceOfBeingErnest 我检查了问题,似乎不重复。

标签: python matplotlib


【解决方案1】:

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

whis:浮点数、序列或字符串(默认 = 1.5
作为浮点数,确定胡须的范围超出第一和第三四分位数。换句话说,如果 IQR 是四分位数范围 (Q3-Q1),则上须线将延伸到小于 Q3 + whis*IQR) 的最后一个基准。同样,下须线将延伸到大于Q1 - whis*IQR 的第一个基准。除了胡须,数据被认为是异常值,并被绘制为单独的点。将此设置为不合理的高值以强制胡须显示最小值和最大值。或者,将其设置为百分位数的升序(例如,[5, 95])以将胡须设置为数据的特定百分位数。最后,whis 可以是字符串 'range' 来强制胡须为数据的最小值和最大值。

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2012-07-26
    相关资源
    最近更新 更多