为数据中的每个变量创建图(所有变量都是分类的)

时间:2019-04-02 22:22:03

标签: r loops plot

我正在使用R中mlbench软件包中的Soybean数据集。

我想通过为每个变量(全部分类)创建简单的条形图来显示频率分布。 情节应该看起来像这样:

https://www.statmethods.net/graphs/images/barplot1.jpg

非常感谢, M

3 个答案:

答案 0 :(得分:2)

或者,您也可以尝试{purrr}在数据的每一列上应用{ggplot2}进程。我在这里使用了aes_string(),因此列名可以作为字符串传递给ggplot美观。

编辑:使用gridExtra :: marrangeGrob()生成所有图形的6 x 6排列。

library(mlbench)
library(purrr)
library(ggplot2)
library(gridExtra)

data("Soybean")

marrangeGrob(
  map(
    names(Soybean), 
    ~ ggplot(Soybean, aes_string(.x)) + 
      geom_bar()
  ),
  ncol = 6,
  nrow = 6,
  top = "Soybean Distribution"
)

答案 1 :(得分:0)

如果要一张一张地绘制所有变量,则可以在数据集的姓上使用一个循环。使用ggplot()和函数get()专注于变量的名称。

library(mlbench)
data(Soybean)
library(ggplot2)
library(dplyr)       

for(j in 1:ncol(Soybean)){

  var <- colnames(Soybean)[j]

  Soybean %>% 
    ggplot(aes(x = get(var))) + 
    geom_histogram(stat = 'count') +
    labs(x = 'var')

}

它将生成36个这样的图形: enter image description here

答案 2 :(得分:0)

使用基数R,您可以通过以下方式获得所需的结果:

my.barplot.function = function(x){ 
  heights = table(x)
  barplot(heights, names.arg = levels(x))
}

apply(Soybean, 2, my.barplot.function)

对于所有变量,您将获得如下图:

Barplot for var 1