绘制 R 数据框中所有列的分布

Soo*_*oji 2 r ggplot2

我试图想出一种干净的方法来绘制 R 数据框中所有列的网格视图。问题是我的数据帧中有离散值和数值。为简单起见,我们可以使用 R 提供的样本数据集,称为iris。我会par(mfrow(x, y))用来分割我的图,也许mapply会循环遍历每一列?我不确定这里什么是最好的。

我在想类似于:

ggplot(iris, aes(Sepal.Length))+geom_density()
Run Code Online (Sandbox Code Playgroud)

而是为每一列绘制。我担心的是“物种”列是离散的。也许“geom_density”不是在这里使用的正确图,但我们的想法是在一个图中查看每个数据框的变量分布——甚至是离散的。离散值的条形图将用于此目的。基本上我正在尝试执行以下操作:

  • 循环遍历数据框中的每一列
  • 如果是数字,则绘制直方图
  • 如果离散(基本上是字符串),则绘制条形图

任何想法或建议将不胜感激!

Jua*_*sco 6

您可以使用该功能plot_gridcowplot包。此函数采用由生成ggplot并创建新图的图列表,将它们组合在网格中。

首先,创建一个图表列表lapplygeom_density用于数字变量和geom_bar其他所有内容。

my_plots <- lapply(names(iris), function(var_x){
  p <- 
    ggplot(iris) +
    aes_string(var_x)

  if(is.numeric(iris[[var_x]])) {
    p <- p + geom_density()

  } else {
    p <- p + geom_bar()
  } 

})
Run Code Online (Sandbox Code Playgroud)

现在我们只需调用plot_grid.

plot_grid(plotlist = my_plots)
Run Code Online (Sandbox Code Playgroud)