geom_text和facets无效

时间:2015-04-26 02:51:19

标签: r ggplot2 facet

数据文件是大到dput的方式,但我希望有人能够识别我的错误。这是故事:我使用ggplot使用以下代码生成以下小倍数图。一切都很好。

ggplot(sm.df, aes(year, N, group = 1)) + geom_line(aes(colour = top10)) + 
facet_wrap( ~ shortTitle, ncol=7) +
theme_bw() +
theme(panel.grid.major = element_blank(), 
panel.grid.minor = element_blank(), 
axis.text.x = element_text(angle=45, hjust=1, size =8)) + 
scale_x_discrete(breaks=seq(1989, 2020, 8)) + 
ylim(0, 150)

enter image description here

现在,我想用整体N注释每个方面。我创建了一个包含x位置,y位置和要绘制的实际值的向量。因此,基本上,每个绘图上的所有内容都位于相同的X和Y位置,具有不同的标签。

'data.frame':   78 obs. of  3 variables:
 $ x1     : num  12.5 12.5 12.5 12.5 12.5 12.5 12.5 12.5 12.5 12.5 ...
 $ y1     : num  130 130 130 130 130 130 130 130 130 130 ...
 $ N.label: int  1650 1456 1348 1216 1086 1035 985 940 888 826 ...

但是,当我将geom_text(data = x.df, aes(x = x1, y = y1, label = N.label), inheret.aes=FALSE)添加到绘图中时,似乎每个标签上的每个标签都被重新打印。显然我做错了什么。 enter image description here

我已经倾注了如何注释多面图,但我错过了这个问题。如果您有任何想法会非常感激 - 产生一些数据并不是非常简单,但我想如果我需要,我会这样做。

1 个答案:

答案 0 :(得分:3)

This回答一个非常相似的问题应该会有所帮助。需要有一个标识符,用于标识要打印哪个标签的哪个方面。在您的情况下,您应该使用shortTitle来实现此目的。

这是一个使用mtcars的修改示例,根据齿轮数量进行刻面和标注

library(ggplot2)

xpos <- c(10,10,10) 
ypos <- c(Inf,Inf,Inf)
lab <- c(378,2,50)
gears <- c(3:5)
ldata <- data.frame(xpos, ypos, lab, gears)


ggplot(mtcars) + geom_bar(aes(x=cyl)) + facet_wrap(~gears, ncol=2) + 
  geom_text(data=ldata, aes(x=xpos, y=ypos, 
                            label=lab, size=1), 
            vjust=2, parse=FALSE)

尝试将shortTitle添加到标签列表中。看起来这可能就是你所需要的。如果您提供数据框的子样本,这将有助于确保。