我如何在 ggplot2 中按 geom / layer 进行分面?
How do I facet by geom / layer in ggplot2?
我希望用 ggplot
的 facet_grid 重新创建下面的 gridExtra
输出,但我不确定哪个变量 ggplot
与层标识在情节中。在这个例子中,有两个 geoms...
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 输出是:
如果您真的想在不同的方面显示不同的图,一种 hacky 方法是制作数据的单独副本并将其子集...
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)
这样做的一种 hacky 方法是采用现有数据框并创建两个、三个您需要的数据框副本,并带有一个链接到它的值,以便稍后用于分面和过滤。将数据帧联合(或绑定)到一个数据帧中。然后设置 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)
我希望用 ggplot
的 facet_grid 重新创建下面的 gridExtra
输出,但我不确定哪个变量 ggplot
与层标识在情节中。在这个例子中,有两个 geoms...
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 输出是:
如果您真的想在不同的方面显示不同的图,一种 hacky 方法是制作数据的单独副本并将其子集...
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)
这样做的一种 hacky 方法是采用现有数据框并创建两个、三个您需要的数据框副本,并带有一个链接到它的值,以便稍后用于分面和过滤。将数据帧联合(或绑定)到一个数据帧中。然后设置 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)