代码之家  ›  专栏  ›  技术社区  ›  Shad

如何在R/ggplot中制作百分比图直方图

  •  -3
  • Shad  · 技术社区  · 2 年前

    作为研究项目的一部分,我正在尝试创建一个类似于下图的图:

    enter image description here

    在我的CSV文件中,我有一列是血压的连续变量,还有一列是存活的分类/二进制变量(是/否)。有什么方法可以用R中的ggplot创建这个图吗?

    从本质上讲,我希望血压在X轴上以离散的10mmHg为间隔,根据血压离散间隔内存活的患者数量/比例绘制。

    我对R很陌生,所以如果这是一个基本问题,我很抱歉。我在论坛上找不到答案。提前谢谢。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Allan Cameron    2 年前

    假设您的数据如下所示:

    set.seed(2)
    df <- data.frame(SBP = sample(101:199, 1000, TRUE))
    df$survived <- c('yes', 'no')[rbinom(1000, 1, (df$SBP - 100)/200) + 1]
    
    head(df)
    #>   SBP survived
    #> 1 185       no
    #> 2 179      yes
    #> 3 170       no
    #> 4 106      yes
    #> 5 132      yes
    #> 6 108      yes
    

    然后你可以:

    library(tidyverse)
    
    df %>%
      mutate(BP = 10 * floor(SBP/10) + 5) %>%
      summarize(survival = sum(survived == 'yes')/n(), 
                n = n(), .by = BP) %>%
      ggplot(aes(BP, survival)) +
      geom_col(width = 10, fill = NA, color = 'black') +
      geom_text(aes(label = paste0(scales::percent(survival, 1),
                                   '\n(n = ', n, ')')),
                nudge_y = -0.1) +
      theme_classic(base_size = 16) +
      scale_x_continuous(breaks = seq(100, 200, 10)) +
      scale_y_continuous(labels = scales::percent)
    

    enter image description here

    如果这对您不起作用,请调整数据帧和列的名称以适合您自己的数据。

    推荐文章