You need to enable JavaScript to run this app. 如何在R中绘制同一图展示3个时间点BMI与HTN的变化趋势
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中绘制同一图展示3个时间点BMI与HTN的变化趋势

R实现两个指标趋势可视化及画布整合方案

完全可以在R中实现该需求,也支持将两个指标的图形整合到同一张画布,以下是可直接运行的实现代码:

1. 依赖包安装与数据构造

# 未安装依赖包先运行下行安装命令
# install.packages(c("tidyverse", "patchwork"))
library(tidyverse)
library(patchwork)

# 构造样本数据集
df <- data.frame(
  ID = c("A1", "A2", "A3", "A4"),
  BMI_1 = c(35,29,38,33),
  BMI_2 = c(37,32,39,34),
  BMI_3 = c(40,35,42,34),
  HTN_1 = c(0,0,1,0),
  HTN_2 = c(0,1,1,0),
  HTN_3 = c(1,1,1,0)
)

2. 数据格式转换(宽表转长表)

# 转换BMI长表,保留个体维度,用于绘制个体折线
bmi_long <- df %>% 
  select(ID, starts_with("BMI")) %>% 
  pivot_longer(cols = -ID, names_to = "time", values_to = "BMI") %>% 
  mutate(time = as.numeric(str_remove(time, "BMI_")))

# 转换HTN长表,按时间点聚合计算患病人数(HTN=1的计数)
htn_long <- df %>% 
  select(ID, starts_with("HTN")) %>% 
  pivot_longer(cols = -ID, names_to = "time", values_to = "HTN") %>% 
  mutate(time = as.numeric(str_remove(time, "HTN_"))) %>% 
  group_by(time) %>% 
  summarise(htn_count = sum(HTN == 1))

3. 绘图与画布整合

# 绘制BMI个体折线图
p1 <- ggplot(bmi_long, aes(x = time, y = BMI, color = ID, group = ID)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  scale_x_continuous(breaks = 1:3, labels = paste0("时间点",1:3)) +
  labs(x = "时间点", y = "BMI值", title = "BMI随时间变化趋势") +
  theme_bw()

# 绘制HTN计数柱状图
p2 <- ggplot(htn_long, aes(x = factor(time, levels = 1:3, labels = paste0("时间点",1:3)), y = htn_count)) +
  geom_col(fill = "steelblue", alpha = 0.7) +
  geom_text(aes(label = htn_count), vjust = -0.3) +
  labs(x = "时间点", y = "HTN阳性人数", title = "HTN计数随时间变化趋势") +
  theme_bw()

# 两张图上下排布整合到同一张画布
p1 / p2

# 如需左右排布改为下行即可
# p1 + p2

补充说明

  • 若不需要展示个体BMI的变化,仅需展示群体BMI均值趋势,可对bmi_long按时间分组求均值后再绘图
  • 也可通过双Y轴方式将两个指标整合到同一个坐标系,不过更推荐分离子图的形式,避免双Y轴带来的解读歧义

内容的提问来源于stack exchange,提问作者Sana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 17:15:01