【问题标题】:Grouped relative barchart on binary encoded subcategories二进制编码子类别上的分组相对条形图
【发布时间】:2019-07-18 20:16:40
【问题描述】:

我有一个包含二进制编码子类别 A-I 的数据集。如果 Number 为 1,则已发生给定子类别中的事件。任何组合都是有效的。此外,“MyCases”列中有三种不同的案例。它看起来像这样:

> dataset
       MyCases I H G F E D C B A
1     Case One 0 0 0 1 0 0 1 0 1
2   Case Three 0 0 0 1 0 0 1 0 1
3     Case Two 0 0 0 1 0 0 0 0 0
4     Case Two 0 0 0 1 1 1 1 0 1
5     Case Two 0 0 0 1 0 0 0 0 1
6   Case Three 0 0 0 0 0 0 0 0 1
7     Case One 0 0 0 0 0 0 0 0 1
8     Case Two 0 0 0 1 0 1 0 0 1
9     Case Two 0 0 0 0 0 0 0 0 0
10    Case One 0 0 0 1 0 1 1 0 1
[...]

我能够生成绝对数字with the help of this thread 的条形图。代码如下:

dataset %>%
 gather(key, value, -MyCases) %>%
 ggplot(., (aes(MyCases, as.numeric(value), fill = key))) +
  labs(
    title = "Chart of absolute numbers",
    x = "The three different cases", y = "absolute number of occurences"
  ) +
 stat_summary(fun.y = sum, geom = "bar", position = "dodge")

你可以看到生成的图表here.


但是,为了能够比较三种不同的情况,我想让条形图相互关联。我想计算“MyCases”中每个不同案例的相对数量。

我的问题是:

  1. 如何正确执行此操作?
  2. 如何使用 ggplot2 创建相对图?

【问题讨论】:

    标签: r ggplot2 dplyr


    【解决方案1】:

    在将您的数据传送到 ggplot 之前,您可以对它们进行分组和汇总,以找出每个案例在每个类别中发生的事件的比例。

    # data are already gathered
    df <- data.frame(case=sample(1:3,500,T),
                     event.type=sample(letters[1:5],500,T),
                     event.value=sample(c(0,1),500,T))
    
    df %>% group_by(case,event.type) %>% 
      summarise(n=sum(event.value)) %>% 
      mutate(prop=n/sum(n)) %>% 
      ggplot(aes(case,prop,fill=event.type)) + geom_bar(stat='identity',position='dodge')
    

    【讨论】:

    • 谢谢!这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多