I want to create a graph that looks like:
Now I found the cowplot
package which gave me a quite similar result.
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)
The result looks like:
But, there are two points that bother me:
I think it must be possible to use facet_grid()
, facet_wrap()
or something similar to achieve this. But I don't know how I can use a column from the dataframe of the second geometry to create these subsets without changing/losing the greyish background plot.
We can feed one layer a version of the data without Species
, so it calculates the whole thing as our background context, and another layer that includes Species
to map that to fill
and to the appropriate facet.
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)