将文本添加到构面图空白条目和标签错误

时间:2016-07-19 15:20:27

标签: r ggplot2

我正在尝试将文字添加到构面图

group = c( rep(c(1,2,1),100)   )
group2 = rep(c("A","B","B"),100)
r = rnorm(300,50,63)
d = data.frame(  group = group,  r = r  , group2 = group2)
head(d)
custom= function (x){
  q = quantile(x)
  return(       c(q[1],q[3],q[5])  )}

p = ggplot(data = d, aes(factor(group), r)) + 
  geom_boxplot()    +
  stat_summary(geom="text", fun.y=quantile,
               aes(label=sprintf("%1.0f", ..y..)),
               position=position_nudge(x=0.33), size=3)+
  facet_wrap(~group2)
p

该代码产生了这个图:

为什么A组中的第2组有空白条目?在下面运行unique(),您可以看到A类没有group = 2

unique(d[,c('group2','group')])

enter image description here

接下来我想在每个盒子图上添加计数作为文本,所以我遵循这个技术:Using annotate to add different annotations to different facets

我在group2和group的唯一组合上使用循环来制作带有标签的数据框,然后将标签作为文本添加到图中。

un=unique(d[,c('group2','group')])
n = dim(un)[1]
un$lab = ""
for(i in 1:dim(un)[1])
{
  un$lab  = length(d$r[group == un$group[i] & group2 == un$group2[i]])
}
un$group2 = as.factor(un$group2)
str(un)
un
p + geom_text(data = un,label = un$lab)

BUt我收到此错误:

Error: Aesthetics must be either length 1 or the same as the data (3): x, y

知道如何消除空白条目并显示标签吗?

1 个答案:

答案 0 :(得分:1)

关于面板A中的空白的第一个问题,请尝试:facet_wrap(~group2, scales = "free_x")

您收到的错误消息是ggplot抱怨说它不知道如何将新图层geom_text()定位到现有的图表框架中,因为un没有{您最初为r坐标映射的{1}}列。如果你这样指定: y它会起作用,但你可能需要稍微调整一下(我很懒,用了50)。

总之,这是你的情节:

geom_text(data = un, aes(x = group, y = 50, label = lab))