一个数据点上的Pandas box plot错误

时间:2017-11-15 14:16:05

标签: python pandas matplotlib boxplot

我正在使用熊猫制作一个盒子图。

我的DataFrame看起来像这样

Year                 2013      2014      2015      2016      2017
dfMin            1.091603  0.973346  1.040000  0.855209  1.079500
dfLowerQuartile  1.727191  1.684009  1.275601  1.136703  2.262654
dfUpperQuartile  2.225000  2.000000  1.857570  2.120644  2.435724
dfMax            2.687323  2.350000  2.105000  2.250000  2.566467

我的图表代码如下所示

chartDF.boxplot(grid=False, figsize=(9,4))

导致一个看起来像这样的情节 enter image description here

我对2017年较低的价值感到困惑。

有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

这是预期的行为。 2017年的最小值比四个提供的数据点的前四分之一低1.5 IQR,在这种情况下,最小值显示为异常值(一个点)。

来自whis boxplot whis强调我的):

  

(Q3-Q1):float,sequence或string(默认值= 1.5)

     

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

所以如果你想让胡须一直延伸,

ssh user@server bash -c 'find /user/$CI_JOB_ID -iname "*.zip" | tail -n 1 | xargs readlink -f'

the docs

答案 1 :(得分:1)

以下情况会怎样?

import pandas as pd
df = pd.DataFrame({"a": [1, 2, 2.1, 2.3]})
df.boxplot()

它从这四个值中计算分位数,值1被解释为异常值。所以:忽略你正在使用的实际索引,pandas将这些值作为数据点。

因此,实际上,您不应自己设置min,max和quantiles,而应将完整数据从数据框传递到boxplot。

答案 2 :(得分:1)

这不是问题。基本上boxplot显示值的意思。如果你从矩形中得到一个点,那就意味着带有该值的点是异常值。

有关异常值的更多信息:Outlier

答案 3 :(得分:1)

这是2017年的异常值。如果您对该观察结果不感兴趣,您只需在数据集中删除它,知道它将更改相应统计指标的值。