忽略ggplot2中的异常值geom_violin

时间:2018-04-18 20:24:56

标签: r ggplot2 violin-plot

有没有办法忽略geom_violin中的异常值并使y轴图与Q1和Q3分位数相关? (基础R中的range=1.5)。如果这可以自动化(即不仅仅是调用特定的y轴限制),那将是很好的。

我在这里看到了一个使用geom_boxplot的解决方案:Ignore outliers in ggplot2 boxplot

但是有没有办法在geom_violin中复制这种类型的解决方案?提前谢谢!

以下示例代码具有所需结果

library(ggplot2)
Result <- as.numeric(c(.2, .03, .11,  .05, .2, .02, .22, 1.1, .02, 120))
Group <- as.factor(c("a", "a", "a", "b", "b", "b", "c", "c", "c", "c"))
x <- data.frame(Result, Group)

plot = ggplot(x, aes(x=Group, y=Result)) +
  geom_violin()

print(plot)

以上是上述输出(不是超级有用的图形):

enter image description here

我想使用以上数据,如下图: enter image description here

1 个答案:

答案 0 :(得分:2)

我认为与您链接的方法类似的方法可以在这里使用,除非您需要为每个组计算这些统计信息,并使用最小Q1和最大Q3作为coord_cartesian

library(dplyr)
# compute lower and upper whiskers for each group
ylims <- x %>%
  group_by(Group) %>%
  summarise(Q1 = quantile(Result, 1/4), Q3 = quantile(Result, 3/4)) %>%
  ungroup() %>%
  #get lowest Q1 and highest Q3
  summarise(lowQ1 = min(Q1), highQ3 = max(Q3))

plot + coord_cartesian(ylim = as.numeric(ylims)*1.05)

请注意,您可以更改coord_cartesian调用中的缩放比例以及计算Q1和Q3范围的代码管道位中的分位数中断。