我确信之前已经提出过这个问题。但是我找不到类似的东西。所以考虑一个简单的实例
我们创建随机数据然后创建箱图:
set.seed(123456)
Ax <- sample(1:3, size = 75, replace = T)
Fac <- sample(LETTERS[1:4], 75, replace = T)
yvalue <- runif(75)
df1 <- data.frame(Ax, Fac, yvalue)
library(ggplot2)
ggplot(df1, aes(factor(Ax), yvalue, colour = Fac)) +
geom_boxplot()
但我们更接近审查我们的数据:
table(df1$Ax, df1$Fac)
我想创建一个像上图那样的箱线图,但是当组大小(n =)小于6时,则:
答案 0 :(得分:2)
您可以尝试:
使用ave()
df1$length <- ave(df1$yvalue, interaction(df1$Ax, df1$Fac), FUN=length)
现在例如调整alpha以绘制未着色/阴影框:
ggplot(df1, aes(factor(Ax), yvalue, fill = Fac, alpha=factor(ifelse(df1$length < 6 ,0.5, 1)))) +
geom_boxplot()
答案 1 :(得分:1)
如果您不关心占位符空间的位置,您只需删除不符合条件的观察结果即可。下面的示例使用dplyr进行数据操作
library(dplyr)
library(ggplot2)
### Identify all groups that have > 5 observations per group
df2 <- df1 %>% group_by(Fac , Ax) %>% summarise( n = n()) %>% filter ( n > 5)
### Only keep groups that meet our criteria
df3 <- df1 %>% semi_join(df2 , by = c("Fac" , "Ax") )
ggplot(df3, aes(factor(Ax), yvalue, colour = Fac)) +
geom_boxplot()