R 使用带有n>;的ggplot的箱线图;5.

R 使用带有n>;的ggplot的箱线图;5.,r,ggplot2,boxplot,R,Ggplot2,Boxplot,我相信这个问题以前有人问过。但我找不到类似的东西。因此,考虑一个简单的工作例子 我们创建随机数据,然后创建箱线图: 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) gg

我相信这个问题以前有人问过。但我找不到类似的东西。因此,考虑一个简单的工作例子

我们创建随机数据,然后创建箱线图:

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()
我想创建一个类似上面的箱线图,但当组大小(n=)小于6时,则:

  • 根本不要绘制箱线图
  • 或者仅在中间带处绘制一条垂直线
这适用于以下红色圆圈中着色的数据

如果您不关心在盒状图的位置使用占位符空间,您只需删除不符合条件的观察值即可。下面的示例使用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()
库(dplyr)
图书馆(GG2)
###确定每组观察值>5的所有组
df2%分组依据(Fac,Ax)%%>%汇总(n=n())%%>%筛选(n>5)
###只保留符合我们标准的组
df3%半联接(df2,by=c(“Fac”、“Ax”))
ggplot(df3,aes(因子(Ax),Y值,颜色=Fac))+
geom_箱线图()
您可以尝试:

使用
ave()

df1$length
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()
df1$length <- ave(df1$yvalue, interaction(df1$Ax, df1$Fac), FUN=length)
ggplot(df1, aes(factor(Ax), yvalue, fill = Fac, alpha=factor(ifelse(df1$length < 6 ,0.5, 1)))) + 
geom_boxplot()