如果这是重复,我道歉。我已经阅读了一些关于注释个别方面的帖子。 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~.)
答案 0 :(得分:3)
这将为置信区间的最小值和最大值添加标签:
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
您希望将min
和max
值用作文本标签和放置它们的x轴位置。 ggplot
负责其余部分(即y值和facet位置),因为除非您覆盖它们,否则它们已经是绘图的固有部分。