你可以在ggplot中为不同的facet指定不同的几何对象吗?

27

如何在ggplot中为不同的面板指定不同的几何对象?

(代表@pacomet提问,他想知道。)

2个回答

53

以下是另一种通过子集数据的方法:

ggplot(mtcars, aes(mpg, disp)) + facet_wrap(~cyl) + 
  geom_point(data = subset(mtcars, cyl == 4)) +
  geom_line(data = subset(mtcars, cyl == 6)) +
  geom_text(data = subset(mtcars, cyl == 8), aes(label = gear))

在此输入图片描述


6
你可以使用subset = .(cyl == 4)代替data来简化代码。这样写能使代码更简单易懂,但不改变原意。 - Ramnath
2
函数 . 来自包 plyr,但我认为它不再起作用了。 - fc9.30
2
在最近版本的ggplot中的另一种选择是使用data = ~subset(.x, cyl == 4) - shizundeiku

3
这里有5个组(g)的样本数据。我们想在第五个小面板中使用不同的几何图形类型。请注意创建两个不同版本的y变量的技巧,一个用于前四个小面板,另一个用于第五个小面板。
dfr <- data.frame(
  x = rep.int(1:10, 5),
  y = runif(50),
  g = gl(5, 10)
)
dfr$is.5 <- dfr$g == "5"
dfr$y.5 <- with(dfr, ifelse(is.5, y, NA)) 
dfr$y.not.5 <- with(dfr, ifelse(is.5, NA, y))

如果不同的几何图形可以使用相同的美学元素(如点和线),那么这就不是问题。
(p1 <- ggplot(dfr) +
  geom_line(aes(x, y.not.5)) +
  geom_point(aes(x, y.5)) +
  facet_grid(g ~ .)
)

然而,线图和条形图需要不同的方面,因此它们不能像预期的那样一起使用。
(p2 <- ggplot(dfr) +
  geom_line(aes(x, y.not.5)) +
  geom_bar(aes(y.5)) +
  facet_grid(g ~ .)
)

在这种情况下,最好画两个独立的图表,然后可以使用Viewport将它们组合起来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接