使用 ggplot 和 n > 5 的箱线图
boxplot using ggplot with n > 5
我确定这个问题以前有人问过。但我找不到任何类似的东西。所以考虑一个简单的例子
我们创建随机数据,然后创建箱线图:
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 时,则:
- 根本不画箱线图
- 或者只在中间画一条垂直线
这是针对以下红色圆圈中阴影的数据
如果您不关心箱线图曾经所在位置的占位符空间,您可以简单地删除不符合您标准的观察结果。下面的示例使用 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()
你可以试试:
使用 ave()
包含出现的列
df1$length <- ave(df1$yvalue, interaction(df1$Ax, df1$Fac), FUN=length)
现在例如调整 alpha 以绘制 uncoloured/shaded 个框:
ggplot(df1, aes(factor(Ax), yvalue, fill = Fac, alpha=factor(ifelse(df1$length < 6 ,0.5, 1)))) +
geom_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)
ggplot(df1, aes(factor(Ax), yvalue, colour = Fac)) +
geom_boxplot()
但我们更仔细地审查了我们的数据:
table(df1$Ax, df1$Fac)
我想创建一个像上面那样的箱线图,但是当组大小 (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()
你可以试试:
使用 ave()
df1$length <- ave(df1$yvalue, interaction(df1$Ax, df1$Fac), FUN=length)
现在例如调整 alpha 以绘制 uncoloured/shaded 个框:
ggplot(df1, aes(factor(Ax), yvalue, fill = Fac, alpha=factor(ifelse(df1$length < 6 ,0.5, 1)))) +
geom_boxplot()