循环 ggplot 中的变量以创建每个变量的密度分布网格

Looping over variables in ggplot to create a grid of density distributions for each variable

我想为数据集中的多个变量创建一个密度分布图网格,在平均值处有一条垂直虚线。以 mtcars 数据集为例,单变量图的代码为:

ggplot(mtcars, aes(x = mpg)) + geom_density() + geom_vline(aes(xintercept = 
mean(mpg)), linetype = "dashed", size = 0.6) 

我不清楚如何更改它以使其循环遍历数据集中的指定变量并生成包含每个变量图的网格。它似乎涉及添加 facet_grid 和 "vars" 参数的某种组合,但我尝试了多种组合但没有成功。

似乎在我可以在网上找到的所有示例中,facet_grid 按变量的子集拆分图,同时为每个图保持相同的 x 和 y,但我想要图x 在每个图中都不同,y 是值的密度。

在尝试解决这个问题时,据我所知,新版本的 ggplot 包含涉及 "quasiquotation" 的内容,这可能有助于解决我的问题 (https://www.tidyverse.org/articles/2018/07/ggplot2-tidy-evaluation/),但同样,我不能很清楚如何将此处提供的示例应用于我自己的问题。

考虑将数据重塑为长格式,而不是使用小平面绘图。这里 x 和 y 尺度都是自由的,因为各列的绘图大小不同。

rdf <- reshape(mtcars, varying = names(mtcars), v.names = "value", 
               times = names(mtcars), timevar = "variable",
               new.row.names = 1:1000, direction = "long")

ggplot(rdf, aes(x = value)) + geom_density() + 
  geom_vline(aes(xintercept = mean(value)), linetype = "dashed", size = 0.6) +
  facet_grid(~variable, scales="free")