【问题标题】:plotting only the most common levels of a variable in geom_bar仅在 geom_bar 中绘制变量的最常见级别
【发布时间】:2020-03-02 20:05:09
【问题描述】:

在我的数据集中,我有一列“化疗”,它有 800 多个不同的级别。我想绘制最常见的,比如说,每年有 10 种化疗患者。

我不知道如何使 geom_bar 仅显示所选频率的级别。

这可以在diamonds 数据集中表示,我想只显示cut 的3 个最常见的级别。

library("ggplot2")
library("dplyr")
library("forcats")

diamonds %>%
  ggplot(aes(x = fct_infreq(factor(cut)))) +
  geom_bar(aes(y = ((..count..)/sum(..count..))*100 ))

图表显示了每个级别的频率,但是说我只想显示前 3 个?

【问题讨论】:

    标签: r ggplot2 geom-bar


    【解决方案1】:

    这是一种选择,在运行ggplot 调用和使用geom_col 之前汇总和过滤数据框:

    diamonds %>% 
      group_by(cut) %>% 
      count(sort = TRUE) %>% 
      ungroup() %>% 
      slice(1:3) %>% 
      mutate(pct = n / sum(n)) %>% 
      ggplot(aes(x = cut, y = pct)) +
      geom_col()
    

    【讨论】:

    • 感谢您的回复。问题是如果我按照你的方式做,我不知道如何为情节添加额外的美感,因为数据已被更改。在我的数据中,我想使用 facet_wrap(~year),但你的方法不允许我这样做。以diamonds 为例,如何将aes(fill = color) 添加到您制作的图表中?
    • 如果要在绘图中添加年份信息,则需要更改过滤 diamonds 的 dplyr 代码。
    • 不确定@alanocallaghan 是什么意思?
    • 本例中直到ggplot 的所有内容都是dplyr 代码,用于汇总diamonds。如果您想包含年份信息,则必须在(例如)分组阶段包含它。
    • 查看我的答案以获取示例。这可能不是您想要完成的,但这个想法应该会有所帮助。
    【解决方案2】:

    修改 cardinal40 的答案以添加有关颜色的信息。

    library("ggplot2")
    library("dplyr")
    library("forcats")
    
    diamonds %>% 
      group_by(cut, color) %>% 
      count(sort = TRUE) %>% 
      slice(1:3) %>%
      ungroup() %>% 
      mutate(pct = n / sum(n)) %>% 
      ggplot(aes(x = cut, y = pct, fill = color)) +
      geom_col()
    

    【讨论】:

    • 感谢您的回复。但是,这样我无法仅绘制前 3 个切割因子,这是我的另一个要求。好像这两种方法是互斥的?
    • 不,您只需要更改代码以按照您想要的方式过滤数据。您是否尝试过更改 dplyr 代码?
    • diamonds %>% group_by(cut, color) %>% count(sort = TRUE) %>% ungroup() %>% group_by(color) %>% slice(1:3) %>% ungroup() %>%mutate(pct = n / sum(n)) %>%ggplot(aes(x = cut, y = pct, fill = color)) + geom_col()
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多