如何基于第二个数据框中的列创建分面
How to create a faceting based on a column in second dataframe
我想创建一个如下所示的图表:
现在我找到了 cowplot
包,它给了我一个非常相似的结果。
library(ggplot2)
library(cowplot)
library(data.table)
library(ggridges)
d = data.table(iris)
a = ggplot(data = d, aes(x=Sepal.Length, y=..count..)) +
geom_density_line() +
geom_density_line(data = d[Species == "virginica"], aes(), fill="lightblue", color="darkblue") +
theme_bw()
b = ggplot(data = d, aes(x=Sepal.Length, y=..count..)) +
geom_density_line() +
geom_density_line(data = d[Species == "versicolor"], aes(), fill="lightgreen", color="darkgreen") +
theme_bw()
cowplot::plot_grid(a, b, labels=NULL)
结果如下:
但是,有两点困扰我:
- 它在两个图中都有一个 y 轴
- 我的真实数据最多有10个网格,代码变得很长
我认为一定可以使用 facet_grid()
、facet_wrap()
或类似的东西来实现这一点。但是我不知道如何在没有 changing/losing 灰色背景图的情况下使用第二个几何数据框中的列来创建这些子集。
我们可以在没有 Species
的情况下向一层提供数据版本,因此它计算整个事物作为我们的背景上下文,另一层包含 Species
以将其映射到 fill
并转到适当的方面。
library(ggplot2); library(ggridges)
ggplot(data = iris, aes(Sepal.Length, ..count..)) +
geom_density_line(data = subset(iris, select = -Species)) +
geom_density_line(aes(fill = Species)) +
facet_wrap(~Species)
我想创建一个如下所示的图表:
现在我找到了 cowplot
包,它给了我一个非常相似的结果。
library(ggplot2)
library(cowplot)
library(data.table)
library(ggridges)
d = data.table(iris)
a = ggplot(data = d, aes(x=Sepal.Length, y=..count..)) +
geom_density_line() +
geom_density_line(data = d[Species == "virginica"], aes(), fill="lightblue", color="darkblue") +
theme_bw()
b = ggplot(data = d, aes(x=Sepal.Length, y=..count..)) +
geom_density_line() +
geom_density_line(data = d[Species == "versicolor"], aes(), fill="lightgreen", color="darkgreen") +
theme_bw()
cowplot::plot_grid(a, b, labels=NULL)
结果如下:
但是,有两点困扰我:
- 它在两个图中都有一个 y 轴
- 我的真实数据最多有10个网格,代码变得很长
我认为一定可以使用 facet_grid()
、facet_wrap()
或类似的东西来实现这一点。但是我不知道如何在没有 changing/losing 灰色背景图的情况下使用第二个几何数据框中的列来创建这些子集。
我们可以在没有 Species
的情况下向一层提供数据版本,因此它计算整个事物作为我们的背景上下文,另一层包含 Species
以将其映射到 fill
并转到适当的方面。
library(ggplot2); library(ggridges)
ggplot(data = iris, aes(Sepal.Length, ..count..)) +
geom_density_line(data = subset(iris, select = -Species)) +
geom_density_line(aes(fill = Species)) +
facet_wrap(~Species)