【问题标题】:Is there a R function to replace the outlier dots in ggplot with number of participants at each level?是否有一个 R 函数可以用每个级别的参与者数量替换 ggplot 中的异常点?
【发布时间】:2020-05-04 03:25:50
【问题描述】:

我正在研究 GGPLOT(附在此处)。我想删除每个级别参与者数量的异常黑点。我确实知道 outlier.shape = NA 将删除异常值,但我如何才能添加相同级别的参与者数量。在这一点上,我保持代码非常简单,因为一旦解决了这个查询,我将添加标签和标题。

例如, a)上部箱线图而不是 4 个异常点,我想添加数字“55、67、89、90” b)下部箱线图而不是4个异常点,我想添加数字“34、56、34、23”

我的代码如下:

ggplot(dist, aes(x=treatment, y=outcome)) + geom_boxplot()+ylim(0,24)+ theme_void()+ coord_flip()

GGPLOT

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 您可能需要确定ggplot 外部的异常值,然后使用geom_text 添加一些内容。
  • 有人可以添加代码吗?因为我已经给出了示例,我需要哪些数字来代替异常点?上箱线图有 4 个数字,下箱线图有 4 个数字。

标签: r ggplot2 boxplot outliers


【解决方案1】:

一种解决方案是先定义异常值,然后使用透明度。

将它放在 mpg 数据集上。

library(ggplot2)
library(dplyr)
data(mpg)

mpg %>%
  group_by(drv) %>%
  mutate(outlier = as.numeric(  # so ggplot doesn't complain about alpha being discrete
    !between(cty, 
            quantile(cty)[2] - 1.5*IQR(cty),
            quantile(cty)[4] + 1.5*IQR(cty)))) %>% 
  ggplot(aes(drv, cty, label=cty)) + 
  geom_boxplot(outlier.shape = NA) +
  geom_text(aes(alpha=outlier), show.legend=FALSE) +
  scale_alpha_continuous(range = c(0, 1))

这里的标签是 cty 变量,但您可以将其替换为另一个代表您所追求的数据(参与者数量)的变量。

【讨论】:

  • 感谢您的回复。我不想将 y 轴编号添加到异常点。我想添加手动编号(在我的情况下是参与者的数量)。我之前看到这篇文章对我的情况没有用。
  • 然后改用它。只要它在数据集中,代码就可以工作。
【解决方案2】:

您可以添加一个包含条件 ifelse() 的文本字段,以添加异常值的实际值 geom_text(aes(label=ifelse((y>'some threshold value'),y,""))))

如果它低于阈值,并且当 y 值超过异常值阈值时 y 的值,这会将其设置为空。

您还可以使用paste( ) 函数添加一些带有值的文本。

【讨论】:

  • 您好,感谢您的回复。我明白了你的意思,但我想为我的上下箱线图添加两组单独的数字。你能帮我确定geom_text的确切编码吗?我已经在问题中上传了我的代码和示例编号。
  • 做你想做的最简单的方法是在你的数据中创建另一个列,其中包含你想要用异常值绘制的值,然后如果 y> threshold 引用 new column 而不是 @987654327 @我上面包含的列,它可以大于v1小于v1,你可以使用and来包含upper和lower
猜你喜欢
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2020-02-28
相关资源
最近更新 更多