R:使用它们可视化多个列

时间:2017-01-04 11:31:45

标签: r ggplot2

我有一个包含以下列的数据框:product_id,...,p1p2p3,...等p列只有 0或1 作为其单元格数据。

我想要一个总结(或统计)p1p2等的条形图,并将每个p列显示为具有总和值的条形(使用 ggplot < /强>)。

此外,我想按product_id填充颜色。

似乎重新整理长格式的数据可能会有所帮助,但我仍然坚持。

这是已经重新塑造的最小数据集:

product_id <- c(1, 2, 3, 1, 2, 3, 1, 2, 3)
p1 <- c(0, 0, 1, 1, 0, 0, 1, 0, 0)
p2 <- c(1, 0, 1, 0, 1, 0, 1, 1, 0)
p3 <- c(0, 0, 1, 1, 0, 1, 0, 1, 1)

df1 <- data.frame(product_id, p1, p2, p3)

df2 <- melt(df1, id.vars = "product_id", 
                  measure.vars = grep("^p[0-9]", names(df1), value = TRUE),
                  variable.name = "p",
                  value.name = "p-active")

2 个答案:

答案 0 :(得分:4)

有几十个ggplot2教程,但我感觉很慷慨:

ggplot(df2, 
       #map columns to aesthetics:
       aes(x = p, y = `p-active`, 
                #important to use a factor for discrete values:
                fill = factor(product_id), 
                color = factor(product_id))) +
  #summarize data:
  stat_summary(fun.y = sum, 
               #the geom:
               geom = "bar", 
               #positioning:
               position = "dodge")

答案 1 :(得分:3)

我不确定我到底知道你想要什么,但我会试一试:

我稍微更改了重塑,因为在数据框列的名称中使用-不是一个好主意:

df2 <- melt(df1, id.vars = "product_id", 
                  measure.vars = grep("^p[0-9]", names(df1), value = TRUE),
                  variable.name = "p",
                  value.name = "p_active")

下一步是总结p_activep每个值product_id的值:

library(dplyr)
df2_summed <- group_by(df2, product_id, p) %>%
              summarise(p_active_summed = sum(p_active))

最后,我创建了情节:

library(ggplot2)
ggplot(df2_summed, aes(x = p, y = p_active_summed, fill = as.factor(product_id))) + 
    geom_col()

enter image description here