首页 > 解决方案 > 循环遍历 ggplot 中的变量以为每个变量创建密度分布网格

问题描述

我想为我在数据集中拥有的多个变量创建一个密度分布图网格,平均值为垂直虚线。以 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 包含一些涉及“准引用”的内容,这可能有助于解决我的问题(https://www.tidyverse.org/articles/2018/07/ggplot2-tidy-评估/)但同样,我无法完全弄清楚如何将此处提供的示例应用于我自己的问题。

标签: rloopsggplot2facet-grid

解决方案


考虑将数据重塑为长格式,而不是使用刻面绘图。这里 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") 

绘图输出


推荐阅读