怎么在ggplot 2中在各个方面注释文本

在ggplot 2中在各个方面注释

我想用以下代码对情节的最后一个方面进行注释:

library(ggplot2)

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()

p <- p + facet_grid(. ~ cyl)

p <- p + annotate("text", label = "Test", size = 4, x = 15, y = 5)

print(p)


但这段代码在每个方面都对文本进行了注释。如果你能指导我如何只从一个方面得到注释的文本,我将不胜感激。提前谢谢。


人到中年有点甜
浏览 659回答 3
3回答

Cats萌萌

通常你会这样做:ann_text&nbsp;<-&nbsp;data.frame(mpg&nbsp;=&nbsp;15,wt&nbsp;=&nbsp;5,lab&nbsp;=&nbsp;"Text", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cyl&nbsp;=&nbsp;factor(8,levels&nbsp;=&nbsp;c("4","6","8")))p&nbsp;+&nbsp;geom_text(data&nbsp;=&nbsp;ann_text,label&nbsp;=&nbsp;"Text")它应该在不完全指定因子变量的情况下工作,但可能会引发一些警告

jeck猫

下面是没有文本注释的情节:library(ggplot2)p&nbsp;<-&nbsp;ggplot(mtcars,&nbsp;aes(mpg,&nbsp;wt))&nbsp;+ &nbsp;&nbsp;geom_point()&nbsp;+ &nbsp;&nbsp;facet_grid(.&nbsp;~&nbsp;cyl)&nbsp;+ &nbsp;&nbsp;theme(panel.spacing&nbsp;=&nbsp;unit(1,&nbsp;"lines"))p让我们创建一个额外的数据框架来保存文本注释:dat_text&nbsp;<-&nbsp;data.frame( &nbsp;&nbsp;label&nbsp;=&nbsp;c("4&nbsp;cylinders",&nbsp;"6&nbsp;cylinders",&nbsp;"8&nbsp;cylinders"), &nbsp;&nbsp;cyl&nbsp;&nbsp;&nbsp;=&nbsp;c(4,&nbsp;6,&nbsp;8))p&nbsp;+&nbsp;geom_text( &nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;dat_text, &nbsp;&nbsp;mapping&nbsp;=&nbsp;aes(x&nbsp;=&nbsp;-Inf,&nbsp;y&nbsp;=&nbsp;-Inf,&nbsp;label&nbsp;=&nbsp;label), &nbsp;&nbsp;hjust&nbsp;&nbsp;&nbsp;=&nbsp;-0.1, &nbsp;&nbsp;vjust&nbsp;&nbsp;&nbsp;=&nbsp;-1)或者,我们可以手动指定每个标签的位置:dat_text&nbsp;<-&nbsp;data.frame( &nbsp;&nbsp;label&nbsp;=&nbsp;c("4&nbsp;cylinders",&nbsp;"6&nbsp;cylinders",&nbsp;"8&nbsp;cylinders"), &nbsp;&nbsp;cyl&nbsp;&nbsp;&nbsp;=&nbsp;c(4,&nbsp;6,&nbsp;8), &nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;c(20,&nbsp;27.5,&nbsp;25), &nbsp;&nbsp;y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;c(4,&nbsp;4,&nbsp;4.5))p&nbsp;+&nbsp;geom_text( &nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;dat_text, &nbsp;&nbsp;mapping&nbsp;=&nbsp;aes(x&nbsp;=&nbsp;x,&nbsp;y&nbsp;=&nbsp;y,&nbsp;label&nbsp;=&nbsp;label))我们还可以将情节分为两个方面:dat_text&nbsp;<-&nbsp;data.frame( &nbsp;&nbsp;cyl&nbsp;&nbsp;&nbsp;=&nbsp;c(4,&nbsp;6,&nbsp;8,&nbsp;4,&nbsp;6,&nbsp;8), &nbsp;&nbsp;am&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;c(0,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;1,&nbsp;1))dat_text$label&nbsp;<-&nbsp;sprintf( &nbsp;&nbsp;"%s,&nbsp;%s&nbsp;cylinders", &nbsp;&nbsp;ifelse(dat_text$am&nbsp;==&nbsp;0,&nbsp;"automatic",&nbsp;"manual"), &nbsp;&nbsp;dat_text$cyl)p&nbsp;+ &nbsp;&nbsp;facet_grid(am&nbsp;~&nbsp;cyl)&nbsp;+ &nbsp;&nbsp;geom_text( &nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;5, &nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;dat_text, &nbsp;&nbsp;&nbsp;&nbsp;mapping&nbsp;=&nbsp;aes(x&nbsp;=&nbsp;Inf,&nbsp;y&nbsp;=&nbsp;Inf,&nbsp;label&nbsp;=&nbsp;label), &nbsp;&nbsp;&nbsp;&nbsp;hjust&nbsp;&nbsp;&nbsp;=&nbsp;1.05, &nbsp;&nbsp;&nbsp;&nbsp;vjust&nbsp;&nbsp;&nbsp;=&nbsp;1.5 &nbsp;&nbsp;)注:你可以用-Inf和Inf若要将文本定位到面板的边缘,请执行以下操作。你可以用hjust和vjust若要调整文本的合理性,请执行以下操作。文本标签数据框架dat_text应该有一个与您的facet_grid()或facet_wrap().

烙印99

我认为上面的答案=“文本”是无用的,下面的代码也没问题。ann_text&nbsp;<-&nbsp;data.frame(mpg&nbsp;=&nbsp;15,wt&nbsp;=&nbsp;5, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cyl&nbsp;=&nbsp;factor(8,levels&nbsp;=&nbsp;c("4","6","8")))p&nbsp;+&nbsp;geom_text(data&nbsp;=&nbsp;ann_text,label&nbsp;=&nbsp;"Text"&nbsp;)但是,如果您想在不同的子图中进行不同的标记,可以这样做:ann_text&nbsp;<-&nbsp;data.frame(mpg&nbsp;=&nbsp;c(14,15),wt&nbsp;=&nbsp;c(4,5),lab=c("text1","text2"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cyl&nbsp;=&nbsp;factor(c(6,8),levels&nbsp;=&nbsp;c("4","6","8")))p&nbsp;+&nbsp;geom_text(data&nbsp;=&nbsp;ann_text,aes(label&nbsp;=lab)&nbsp;)
打开App,查看更多内容
随时随地看视频慕课网APP