我想用以下代码在图的最后一个面上注释一些文本:
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)
Run Code Online (Sandbox Code Playgroud)

但是这段代码注释了每个方面的文本.如果您指导我如何仅在一个方面获得带注释的文本,我将非常感激.提前致谢.
jor*_*ran 128
通常你会做这样的事情:
ann_text <- data.frame(mpg = 15,wt = 5,lab = "Text",
cyl = factor(8,levels = c("4","6","8")))
p + geom_text(data = ann_text,label = "Text")
Run Code Online (Sandbox Code Playgroud)
它应该工作而不完全指定因子变量,但可能会抛出一些警告:

Kam*_*ski 84
这是没有文字注释的情节:
library(ggplot2)
p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_grid(. ~ cyl) +
theme(panel.spacing = unit(1, "lines"))
p
Run Code Online (Sandbox Code Playgroud)
让我们创建一个额外的数据框来保存文本注释:
dat_text <- data.frame(
label = c("4 cylinders", "6 cylinders", "8 cylinders"),
cyl = c(4, 6, 8)
)
p + geom_text(
data = dat_text,
mapping = aes(x = -Inf, y = -Inf, label = label),
hjust = -0.1,
vjust = -1
)
Run Code Online (Sandbox Code Playgroud)
或者,我们可以手动指定每个标签的位置:
dat_text <- data.frame(
label = c("4 cylinders", "6 cylinders", "8 cylinders"),
cyl = c(4, 6, 8),
x = c(20, 27.5, 25),
y = c(4, 4, 4.5)
)
p + geom_text(
data = dat_text,
mapping = aes(x = x, y = y, label = label)
)
Run Code Online (Sandbox Code Playgroud)
我们还可以在两个方面标记图:
dat_text <- data.frame(
cyl = c(4, 6, 8, 4, 6, 8),
am = c(0, 0, 0, 1, 1, 1)
)
dat_text$label <- sprintf(
"%s, %s cylinders",
ifelse(dat_text$am == 0, "automatic", "manual"),
dat_text$cyl
)
p +
facet_grid(am ~ cyl) +
geom_text(
size = 5,
data = dat_text,
mapping = aes(x = Inf, y = Inf, label = label),
hjust = 1.05,
vjust = 1.5
)
Run Code Online (Sandbox Code Playgroud)
笔记:
-Inf和Inf在面板边缘定位文本.hjust和vjust调整文本对齐方式.dat_text应该有一个与您的facet_grid()或与之一起使用的列facet_wrap().Tun*_*ung 24
如果有人正在寻找一种简单的方法来标记报表或出版物的方面,则该egg软件包的开发版本具有tag_facet()功能
library(ggplot2)
p <- ggplot(mtcars, aes(qsec, mpg)) +
geom_point() +
facet_grid(. ~ am) +
theme_bw(base_size = 12)
# install.packages('egg', dependencies = TRUE)
library(egg)
Run Code Online (Sandbox Code Playgroud)

# Default
tag_facet(p)
Run Code Online (Sandbox Code Playgroud)

# align top right & use Roman numerals
tag_facet(p, x = Inf, y = Inf,
hjust = 1.5,
tag_pool = as.roman(1:nlevels(factor(mtcars$am))))
Run Code Online (Sandbox Code Playgroud)

小智 21
我认为对于上面的答案lab ="Text"是没用的,下面的代码也没问题.
ann_text <- data.frame(mpg = 15,wt = 5,
cyl = factor(8,levels = c("4","6","8")))
p + geom_text(data = ann_text,label = "Text" )
Run Code Online (Sandbox Code Playgroud)
但是,如果要在不同的子图中标记不同,则可以通过以下方式进行标记:
ann_text <- data.frame(mpg = c(14,15),wt = c(4,5),lab=c("text1","text2"),
cyl = factor(c(6,8),levels = c("4","6","8")))
p + geom_text(data = ann_text,aes(label =lab) )
Run Code Online (Sandbox Code Playgroud)
Joh*_*ohn 10
稍微扩展 joran 的出色答案,以阐明标签数据框的工作原理。
您可以将“mpg”和“wt”分别视为 x 和 y 坐标(我发现跟踪原始变量名称比重命名它们更容易,如 Kamil 的出色答案)。每个标签需要一行,“cyl”列显示每行与哪个方面相关联。
ann_text<-data.frame(mpg=c(25,15),wt=c(3,5),cyl=c(6,8),label=c("Label 1","Label 2"))
ann_text
> mpg wt cyl label
> 25 3 6 Label 1
> 15 5 8 Label 2
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p <- p + facet_grid(. ~ factor(cyl))
p + geom_text(data = ann_text,label=ann_text$label)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63601 次 |
| 最近记录: |