使用带有n>的ggplot的boxplot五

时间:2016-06-30 08:21:27

标签: 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)
ggplot(df1, aes(factor(Ax), yvalue, colour = Fac)) + 
  geom_boxplot()

但我们更接近审查我们的数据:

table(df1$Ax, df1$Fac)

我想创建一个像上图那样的箱线图,但是当组大小(n =)小于6时,则:

  • 不要全部绘制箱线图
  • OR仅在中位数
  • 处绘制一条垂直线

这是红色圆圈中阴影的以下数据 enter image description here

2 个答案:

答案 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()

enter image description here

答案 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()