1

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

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)
4

2 回答 2

0

我对我在评论中提到的线程的看法是,您必须基本上将“边距”放入数据集中。我确信有一种优雅的方法可以做到这一点,但它现在正在逃避我。这是一种“蛮力”方法,似乎有效,但并不漂亮。

本质上,我制作了三个额外的数据集副本,并添加了第三个级别vsam合并边距。然后我就rbind在一起了。起初我认为它不起作用,但我意识到我需要更改级别顺序,vs以便反向顺序与您示例中的顺序相匹配。然后,您的数据集frame_labels就像添加标签的魅力一样。

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))
于 2013-10-16T20:52:58.723 回答
0

只需删除 geom_text(...) 部分。

代码应如下所示以获得所需的输出

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)

希望这可以帮助。

于 2013-10-16T21:00:37.720 回答