我希望使用gridExtra
的facet_grid重新创建下面的ggplot
输出,但是我不确定ggplot
标识了图中的图层是什么。在此示例中,有两个几何...
require(tidyverse)
a <- ggplot(mpg)
b <- geom_point(aes(displ, cyl, color = drv))
c <- geom_smooth(aes(displ, cyl, color = drv))
d <- a + b + c
# output below
gridExtra::grid.arrange(
a + b,
a + c,
ncol = 2
)
# Equivalent with gg's facet_grid
# needs a categorical var to iter over...
d$layers
#d + facet_grid(. ~ d$layers??)
我希望重新创建的gridExtra输出是:
答案 0 :(得分:2)
如果您真的想在不同的方面显示不同的情节,则一种怪异的方法是制作数据的单独副本并将其子集...
mpg2 <- mpg %>% mutate(facet = 1) %>%
bind_rows(mpg %>% mutate(facet = 2))
ggplot(mpg2, aes(displ, cyl, color = drv)) +
geom_point(data = subset(mpg2, facet == 1)) +
geom_smooth(data = subset(mpg2, facet == 2)) +
facet_wrap(~facet)
答案 1 :(得分:2)
一种不明智的做法是获取现有数据帧,并创建所需的数据帧的两个,三个,许多副本,并为其链接一个值以用于构面并稍后进行过滤。将数据帧合并(或绑定)为一个数据帧。然后设置ggplot和geoms并为所需属性过滤每个geom。另外,对于构面,请使用现有属性拆分图。
这可以在下面看到:
df1 <- data.frame(
graph = "point_plot",
mpg
)
df2 <- data.frame(
graph = "spline_plot",
mpg
)
df <- rbind(df1, df2)
ggplot(df, mapping = aes(x = displ, y = hwy, color = class)) +
geom_point(data = filter(df, graph == "point_plot")) +
geom_smooth(data = filter(df, graph == "spline_plot"), se=FALSE) +
facet_grid(. ~ graph)