在 ggplot2 中注释各个方面

Annotating individual facets in ggplot2

如果这是重复的,我深表歉意。我已经阅读了很多关于注释各个方面的帖子。 This 似乎最接近我的问题,但我似乎无法用我的数据实现这一点。我想在每个方面的置信区间的最小值和最大值中添加稍小的字体标签。任何朝着正确方向的推动将不胜感激,我只是开始使用 ggplot。非常感谢。

library(ggplot2)
library(gridExtra)
Outcome<-c(1,1,1,2,2,2,3,3,3)
OR<-c(1.97,2.47,3.56,1.73,2.25,4.09,1.21,1.48,2.25)
min<-c(1.37,1.74,2.55,1.13,1.52,2.84,0.74,0.95,1.49)
max<-c(2.83,3.49,4.98,2.66,3.35,5.9,1.97,2.33,3.41)
Aces<-c(1,2,3,1,2,3,1,2,3)
ace<-data.frame(cbind(Outcome,OR,min,max,Aces))
ace2<-data.frame(min,max,Outcome,Aces)

ace_labels <- list('1'="1 ACE",'2'="2 ACEs",'3'="3 ACEs")

ace_labeller <- function(variable,value){return(ace_labels[value])}

ace$Outcome = factor(ace$Outcome, levels=c("3","2","1"), 
                     labels=c("MH Barrier to Work: Model 3",
                              "MH Barrier to Work: Model 2",
                              "Depression: Model 1"))            

p<-ggplot(data=ace,aes(x=OR,y=Outcome,label=OR))+
  geom_point(aes(size=8))+
  geom_text(size=5,vjust=1.75)+
  geom_errorbarh(aes(xmin=min,xmax=max),height=.1)+
  geom_vline(xintercept=1,linetype="dashed")+
  scale_x_log10(breaks=seq(1,6,1),name="Odds Ratios (ORs) and 95% Confidence Intervals")+
  labs(y="")+
  facet_grid(Aces~., labeller=ace_labeller)+
  guides(size=FALSE)+
  theme_bw()+
  theme(axis.text.y=element_text(size=12))+
  theme(strip.text.y=element_text(size = 12))+
  theme(axis.title.x=element_text(size = 12,hjust=.5))

  #I can get one on there but can't figure out how to control it per facet
  p + annotate("text", label="1.37", x =1.37, y=2.8, size=4)

  #This is as close as I can get with the data frame approach 
  #(which is not very close at all)
  ace2<-data.frame(cbind(min, Outcome,Aces))
  p + geom_text(data=ace2,aes(x=min,y=2.8,label=min,inherit.aes=FALSE)) +
  facet_grid(Aces~.)

这将为置信区间的最小值和最大值添加标签:

p + geom_text(aes(label=min, x=min), vjust=1.5, size=4) +
  geom_text(aes(label=max, x=max), vjust=1.5, size=4)

之所以可行,是因为 ggplot 在您传递给它的原始数据框中已经拥有了它需要的所有值。您只需告诉 geom_text 您希望将 minmax 值用作文本标签和放置它们的 x 轴位置。 ggplot 负责其余部分(即 y 值和小平面位置),因为除非您覆盖它们,否则它们已经是绘图的固有部分。