我正在尝试将文字添加到构面图
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')])
接下来我想在每个盒子图上添加计数作为文本,所以我遵循这个技术: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
知道如何消除空白条目并显示标签吗?
答案 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))