我正在尝试创建一个类似于下图的图表作为研究项目的一部分:
在我的 CSV 文件中,我有一列是血压的连续变量,有一列是幸存者的分类/二元变量(是/否)。有什么方法可以使用 R 中的 ggplot 创建这个图吗?
基本上,我希望 X 轴上的血压以离散的 10mmHg 间隔显示,根据该血压离散间隔内存活的患者数量/比例绘制。
我对 R 很陌生,所以如果这是一个基本问题,我深表歉意。我在论坛上找不到答案。预先感谢。
假设您的数据如下所示:
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)
如果这对您不起作用,请调整数据框和列的名称以适合您自己的数据。