如何为ggplot中的不同方面指定不同的geom?
(代表@pacomet提问,wanted to know。)
答案 0 :(得分:35)
这是通过对数据进行子集化的另一种方法:
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))
答案 1 :(得分:2)
以下是一些包含5组(g
)的示例数据。我们想在第五方面使用不同的geom类型。请注意创建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))
如果不同的geom可以使用相同的美学(如点和线),那么这不是问题。
(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
组合。