【发布时间】:2011-12-15 18:44:25
【问题描述】:
如何为 ggplot 中的不同方面指定不同的几何?
(代表@pacomet 询问,wanted to know。)
【问题讨论】:
-
感谢 Richie 的提问
如何为 ggplot 中的不同方面指定不同的几何?
(代表@pacomet 询问,wanted to know。)
【问题讨论】:
这里有一些包含 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 结合起来。
【讨论】:
这是另一种通过子集化数据的方法:
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))
【讨论】:
subset = .(cyl == 4) 而不是使用data 调用来稍微简化代码。
. 来自包 plyr 但我认为它不再起作用了
ggplot 的最新版本中的替代方法是使用 data = ~subset(.x, cyl == 4)