首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在箱线图中,如何显示异常值的存在,而不是实际绘制它们?

在箱线图中,如何显示异常值的存在,而不是实际绘制它们?
EN

Stack Overflow用户
提问于 2019-03-28 18:47:33
回答 1查看 398关注 0票数 1

在我们的数据集中,我们有一些绝对巨大的异常值。对数缩放没有帮助。但是我们想告诉读者异常值是存在的(并说出有多少个,在箱线图的哪一边,正的还是负的),最好不要手动添加文本到标题中。有没有好的方法来解决这个问题?最好是R,Matplotlib或Seaborn。

这不同于例如Ignore outliers in ggplot2 boxplot,因为我不想忽略异常值:我想证明它们的存在,但不是绘制它们。

示例代码:

代码语言:javascript
复制
# from https://stackoverflow.com/questions/5677885/ignore-outliers-in-ggplot2-boxplot
> library("ggplot")
> df = data.frame(y = c(-100, rnorm(100), 100))
> ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)))

我们看到了一个由于存在异常值而无用的箱线图。如果我们在该链接上遵循公认的答案,我们将以一种非常好的方式删除异常值,但现在读者没有意识到有任何异常值。

编辑一些评论/答案,询问我实际想要什么,但这正是困难所在--我知道我想要异常值(以及主要数据)的自动图形表示,但我不知道这到底应该是什么样子。我希望社区中的某些人知道针对这种情况的一些最佳实践。我不需要帮助编写代码来查找异常值或向图中添加文本。

EN

回答 1

Stack Overflow用户

发布于 2019-11-10 00:59:16

基本函数boxplot.stats()就是您所需要的。有关如何识别异常值的详细信息,请参阅帮助函数。这里有一种方法可以找到并报告异常值的存在。

代码语言:javascript
复制
  set.seed(123) # make reproducible
  y <- c(rnorm(3, -100), rnorm(3, 100), rnorm(100, 1))
  y <- sample(y) # mix 'em up
  out <- boxplot.stats(y)$out # find outliers
  lo <- out[out < median(y)] # collect low
  hi <- out[out > median(y)] # collect high
  sel.lo <- which(y %in% lo) # collect positions of low
  sel.hi <- which(y %in% hi) # collect positions of high

# Report on what was found
  sprintf("%d low outliers and %d high outliers found",
    length(lo), length(hi))
# [1] "3 low outliers and 3 high outliers found"

出于打印目的,您可以在更合理的距离处将sel.losel.hi标识的值替换为占位符。当然,更改数据并重新应用boxplot可能会更改统计数据并更改异常值的定义。

如果保留原始箱线图属性但没有异常值影响很重要,则可以使用boxplot.stats中的值设置绘图比例。

代码语言:javascript
复制
  ylim <- 1.1 * boxplot.stats(y)$stats[c(1, 5)] # ends of the whiskers
  par(mfrow = c(1,2), las = 2, mar = c(1, 4, 3, 1))
  boxplot(y, main = "All data")
  boxplot(y, ylim = ylim, main = "Outliers ignored")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55395681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档