【问题标题】:Create a stacked bar chart grouped by multiple x parameters创建按多个 x 参数分组的堆积条形图
【发布时间】:2020-07-06 12:57:29
【问题描述】:

我在创建堆叠条形图时遇到困难,其中 x 轴有多个分组。

 df <- data.frame(random = c(1, 1, 1, 1, 1, 1, 1),
                  value = c("s1", "s1", "s1", "s1", "s1", "s2", "s3"),
                  countries = factor(c("US", "Japan", "UK", "Germany", "France", "France", "France")),
                  week = factor(c("week1", "week2", "week1", "week2", "week1", "week1", "week2")))

在此示例中,我尝试按 week 和 countries 对 x 轴进行分组。 我想通过按 week、countries 和 value 分组来显示 value 出现次数的百分比。我希望条形图的输出显示为:

  • 美国,第 1 周:100%
  • 日本,第 2 周:100%
  • 英国,第 1 周:100%
  • 德国,第 1 周:100%
  • 法国,第 1 周:50%(value-s1),50%(value-s2)
  • 法国,第 2 周:100%(价值-s3)

我当前的代码是:

  result <- df %>% group_by_(df$countries, df$week, df$value) %>% summarise(total = n()) #get number of occurences
  ggplot(result, aes(x = interaction(result[["countries"]], result[["week"]]), y = result[["total"]], fill = result[["total"]])) +
    geom_bar(position = "fill", stat = "identity") +
    scale_y_continuous(labels = scales::percent_format())

你能帮我解决这个逻辑吗?我相信 scale_y_continuous(labels = scales::percent_format()) 应该为我计算百分比。

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    不确定填充变量应该是什么。

    result <- df %>% 
      unite("group", countries:week, sep = ", ") %>%
      count(group, value) %>% 
      group_by(group) %>%
      mutate(p = round(n / sum(n), 2))
    
    ggplot(result, aes(x = group, y = p, fill = as.factor(value))) +
      geom_bar(position = "fill", stat = "identity") +
      scale_y_continuous(labels = scales::percent_format()) +
      coord_flip()
    

    编辑

    如果我理解正确,请尝试:

    result <- df %>% 
      unite("group", countries:week, sep = ", ") %>%
      count(group, value) %>% 
      group_by(group) %>%
      mutate(p = round(n / sum(n), 2)) %>%
      separate("group", c("country", "week"), sep = ", ")
    
    ggplot(result, aes(x = week, y = p, fill = as.factor(value))) +
      geom_bar(position = "fill", stat = "identity", width = 0.5) +
      facet_grid(~country,scales = "free_x") +
      scale_y_continuous(labels = scales::percent_format()) 
    

    【讨论】:

    • 非常感谢!非常感谢您的帮助。这是我所期望的。我想知道,是否有可能让法国的第 2 周+第 1 周彼此相邻?即国家及其所有相关周作为一个部分
    • @coder123 如果这回答了您的问题(我相信它确实回答了),请考虑接受它。如果您有后续问题,请考虑将其作为后续问题提出。这样,未来的读者会更好地看到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多