根据大量数据创建带有多列的条形图(以R表示)

时间:2018-06-27 12:49:03

标签: r ggplot2 multiple-columns

我处理大量数据(n = 2057),并且数据框如下所示:

        id_num    Gender   Protein_Milk   Protein_Cheese
 1       2345       1           4.5           3.4
 2       45983      2           5.6           5.2
 .         .        .            .             .
 .         .        .            .             .
 .         .        .            .             .
2057    13454       1           2.6            8.5

我想创建一个绘制栏,在x轴上并排排列着Protein_Milk和Protein_Cheese列,并按性别分组。 Y轴显示蛋白质(g)的平均值。 问题是,我无法创建具有两个列的barplot。因此,每列(Protein_Milk / Protein_Cheese)有2个不同的条形图。

我的R命令:

  Data_Frame$Gemder<-factor(Data_Frame$Gender, levels = c(1,2), labels = c("Men", "Women"))
  Barplot<-ggplot(Data_Frame, aes(Gender, Protein_Milk))
  Barplot +
  stat_summary(fun.y = mean, geom = "bar")+
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar")

有人有什么建议吗? 预先感谢

编辑: 由于我的数据很大,因此无法在此处使用解决方案:

Creating grouped bar-plot of multi-column data in R

我需要找到一种方法来创建具有两列的条形图,而无需在 c() read.table(text =“”)中写入所有条目每列2057个条目将花费很长时间。

1 个答案:

答案 0 :(得分:0)

仍不能完全确定所需的输出类型,但这是一个示例。主要问题是您的数据为长格式,并且需要为高格式。有关更多信息,请查看:http://r4ds.had.co.nz/tidy-data.html

这是我的解决方案,该解决方案使用多面包装将每个性别的图表并排放置。为了简单起见,我正在制作一些虚拟数据。

library(tidyverse) 

data <- tibble(id = c(1:4), 
               gender = c(1, 2, 1, 2), 
               protein_cheese = c(4, 5, 6, 7), 
               protein_milk = c(6, 7, 8, 9)
        )

data %>%
  gather(key = type, 
         value = protein,
         protein_cheese:protein_milk) %>%
         ggplot(aes(x = type, y = protein)) +
         geom_col() +
         facet_wrap( ~ gender)