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

问题描述 投票:0回答:1

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

enter image description here

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

基本上,我希望 X 轴上的血压以离散的 10mmHg 间隔显示,根据该血压离散间隔内存活的患者数量/比例绘制。

我对 R 很陌生,所以如果这是一个基本问题,我深表歉意。我在论坛上找不到答案。预先感谢。

r ggplot2 histogram percentage
1个回答
0
投票

假设您的数据如下所示:

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)

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

© www.soinside.com 2019 - 2024. All rights reserved.