对于ggplot2 geom_boxplot,只有2个样本时,是否可以删除盒子和晶须?

时间:2019-01-14 21:14:09

标签: r ggplot2

当特定组中只有几个样本时,我遇到了geom_boxplot和ggplot2问题。当组中的样本数量较少时,ggplot2的geom_boxplot命令仍会生成盒子和晶须,即使在不合适的情况下,也会产生四分位数的视图。

我希望有人知道一种方法,可以强制ggplot2不要为具有少量样本的组绘制盒子和胡须。

这是一个显示问题的玩具示例。

###Example
library(ggplot2)

#Set DF for plot 
Num <- c(150, 196, 182, 224, 111, 129, 80, 183, 130, 171, 169, 165)
Group <- c("Three", "Three", "One", "Two", "One", "Two", "One", "Two", "One", "Two", "One", "Two")
DF <- data.frame(Num, Group)

#Make figure
p1 <- ggplot(DF, aes(Group, Num))
p1 + geom_boxplot(aes(fill=Group)) + scale_color_manual(values = c("#CC0000", "#0000E5", "#008000")) + theme_minimal() + scale_shape_manual(values = c(16,17,15)) +
geom_point(size = 2.5) + scale_x_discrete(limits=c("One", "Two", "Three")).

当前,它输出下图,但是“三”组下只有两个样本。有没有一种方法可以强迫特定组仅在组中少于N个样本的情况下显示点?

CurrentOutputOfCode

对于这个数字,我希望第一和第二小组看起来像他们,但是希望第三小组只有两点,没有别的。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案肯定是通过预先计算点数来仅给geom_boxplot要绘制的数据行:

DF$n = with(DF, ave(Num, Group, FUN = length))
## if you like dplyr
# DF = group_by(DF, Group) %>% mutate(n = n())

ggplot(DF, aes(Group, Num)) +
  geom_boxplot(data = subset(DF, n > 2), aes(fill = Group)) +
  scale_color_manual(values = c("#CC0000", "#0000E5", "#008000")) +
  theme_minimal() + 
  scale_shape_manual(values = c(16, 17, 15)) +
  geom_point(size = 2.5) + 
  scale_x_discrete(limits = c("One", "Two", "Three"))

enter image description here