【问题标题】:ggplot boxplot: too many outliers?ggplot boxplot:异常值太多?
【发布时间】:2019-05-10 08:43:39
【问题描述】:

数据集在此处可用,但我仅使用 2010 年至 2016 年的数据集作为子集:https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results/

我正在尝试用箱线图绘制不同性别的高度,它会返回此图:


我觉得这是不正确的,因为异常值太多......(平均值=175,最小值=133,最大值=221)。 我想知道是否需要调整 Y 轴以在此箱线图中包含更多数据点?如果是这样,我该怎么做?

这是我的代码:

ggplot(data = olympics, aes(x = Sex, y = Height) +
 geom_boxplot() +
 labs(title= "Height Distribution of Olympics Athletes by Gender")

另外,我想知道是否也可以使用基本 R 语言绘制这样的图表?谢谢!

【问题讨论】:

  • 数据链接失效。请使用例如提供它dput.
  • "我觉得这不正确,因为异常值太多...(mean=175, min=133, max=221)。"为什么你会有这种“感觉”?括号中的数字与您的“感受”有何关系?
  • 只需在 R 中执行 dput(olympics) 并将输出粘贴到您的问题中。
  • 该图很可能是正确的,您只是有那么多异常值,而 ggplots 的默认胡须长度是强制执行的。如果您想将晶须扩展到 1.5 的四分位数范围之外,您可以通过在对 boxplot 的调用中使用 coef 来实现。一个例子是输入ggplot(data = olympics, aes(x = Sex, y = Height) + geom_boxplot(coef = 10) + labs(title= "Height Distribution of Olympics Athletes by Gender")。注意:这当然只会改变您的数据的显示方式
  • 我赞同@kath 和@Roland 的观点。如果您使用dput() 提供数据会容易得多。包括我在内的许多用户都不倾向于注册网站并手动下载数据集,因此如果您需要帮助,请让我们更轻松:)

标签: r ggplot2


【解决方案1】:

欢迎来到stackoverflow @VanLindert。获得帮助的最佳方式是为我们提供运行代码来复制问题。 datapastareprex 包使这很容易做到。 https://reprex.tidyverse.org/articles/articles/datapasta-reprex.html

我怀疑正在发生的事情是您正在重新调整 y 轴限制并且箱线图不断变化。当您使用 plot + scale_y_continuous(limits = c(130, 225)) 或简写 plot + ylim(130, 225) 时,ggplot 会过滤掉高于/低于 130 和 225 的值,并重新计算四分位数。如果您只想将绘图放大到特定范围,可以使用

plot + coord_cartesian(ylim = c(130, 225))

【讨论】:

  • 请注意,在这两种方法中,您的图表不再反映基础数据!您实际上是在选择显示一个分布,该分布 - 相对于您的数据 - 在两个边缘都受到审查。
  • coord_cartesian() 将放大而不删除任何基础数据
  • 是的,但是该图仍然存在偏差,因为它没有显示许多异常值。很难看出抑制这些数据点的原因,尤其是因为在这种情况下,它们被包含在计算盒子和胡须中
猜你喜欢
  • 2014-09-27
  • 2019-10-19
  • 1970-01-01
  • 2021-03-06
  • 2015-04-06
  • 1970-01-01
  • 2011-03-01
  • 2014-09-15
相关资源
最近更新 更多