R 如何在ggplot2中注释面而不是边距

R 如何在ggplot2中注释面而不是边距,r,annotations,ggplot2,facet,R,Annotations,Ggplot2,Facet,如何唯一地注释每个主要方面,但在相应的边距方面没有注释?下面的代码以我喜欢的方式将文本放置在主要方面,但是边距显示了叠加的文本。如何抑制边距面中的文本 frame_labels <- data.frame( frame = LETTERS[1:4], vs = rep(0:1, each = 2), am = rep(0:1, times = 2), x = 5, y = 33) p <- ggplot(mtcars, aes(x = wt, y = mpg)) +

如何唯一地注释每个主要方面,但在相应的边距方面没有注释?下面的代码以我喜欢的方式将文本放置在主要方面,但是边距显示了叠加的文本。如何抑制边距面中的文本

frame_labels <- data.frame(
  frame = LETTERS[1:4],
  vs = rep(0:1, each = 2),
  am = rep(0:1, times = 2),
  x = 5, y = 33)

p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
p <- p + facet_grid(vs ~ am, margin = TRUE, as.table = FALSE)
p <- p + geom_text(data = frame_labels, aes(x = x, y = y, label = frame))
print(p)
我的观点是,你必须将利润率输入到你的数据集中。我相信有一种优雅的方法可以做到这一点,但目前我还没有意识到这一点。这里有一个蛮力的方法,似乎是可行的,但并不漂亮

基本上,我额外复制了三份数据集,并在vs和am中添加了第三个级别以合并边距。然后我把它们都绑在一起。起初我认为它不起作用,但我意识到我需要更改vs的级别顺序,以便反向顺序与示例中的顺序相匹配。然后,您的数据集框架标签会像一个符咒一样添加标签

mtcars2 = mtcars3 = mtcars4 = mtcars
mtcars2$vs = mtcars3$am = mtcars4$am = mtcars4$vs = "all"
mtcarsall = rbind(mtcars, mtcars2, mtcars3, mtcars4)

mtcarsall$vs = factor(mtcarsall$vs, levels = c("all", "0", "1"))

ggplot(mtcarsall, aes(x = wt, y = mpg)) + geom_point() + 
    facet_grid(vs ~ am, as.table = FALSE)+
    geom_text(data = frame_labels, position = NULL, aes(x = x, y = y, label = frame))

只需删除geom_文本。。。部分

代码应该是这样的,以获得所需的输出

library(ggplot2)

frame_labels <- data.frame(
frame = LETTERS[1:4],
vs = rep(0:1, each = 2),
am = rep(0:1, times = 2),
x = 5, y = 33)

p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
p <- p + facet_grid(vs ~ am, margin = TRUE, as.table = FALSE)
print(p)

希望这有帮助。

如果您想这样做,可能需要预处理数据集。请看温斯顿的答案。谢谢@aosmith,我看到了那个帖子,但我不明白。我将其解释为在geom_text data.frame中为刻面变量添加一个额外的级别,称为ALL。有几件事似乎与他的评论一致,但我都没能成功。太棒了!不管有没有暴力,它都能完成任务。非常感谢@aosmith!