You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ggplot绘制包含BMI、体重变化与相对风险(RR)的单图?

用ggplot2绘制BMI、体重变化与相对风险(RR)的关联图

首先,ggplot2要求数据为长格式(tidy data),你当前的矩阵是宽格式,所以第一步需要转换数据结构。以下是完整实现步骤:

1. 加载所需R包

library(ggplot2)
library(tidyr) # 用于数据格式转换

2. 将宽格式矩阵转换为长格式

把矩阵转为数据框后,用pivot_longer将BMI列转为单独变量:

# 保留行名作为体重变化分组,转成宽转长格式
chd_df <- as.data.frame(chd.wt) %>%
  mutate(weight_change = rownames(chd.wt)) %>%
  pivot_longer(cols = -weight_change, 
               names_to = "bmi_category", 
               values_to = "rr")

转换后的数据结构示例:

weight_changebmi_categoryrr
gained 20 kg<193.0
gained 20 kg19-20.32.9

3. 用ggplot2绘制可视化图表

推荐两种适配论文需求的可视化方式:

方式一:热图(适合对比RR分布)

用颜色深浅表示RR值,清晰展示不同分组的风险差异:

ggplot(chd_df, aes(x = bmi_category, y = weight_change, fill = rr)) +
  geom_tile(color = "white") + # 白色边框区分区块
  geom_text(aes(label = rr), color = "black", size = 4) + # 标注RR数值
  scale_fill_gradient(low = "#f7fbff", high = "#08306b") + # 设置颜色渐变
  labs(x = "BMI区间", y = "体重变化分组", fill = "相对风险(RR)",
       title = "体重变化与BMI对冠心病相对风险的影响") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠

方式二:点图(适合观察趋势)

用点的大小和颜色同时表示RR值,更易捕捉风险变化趋势:

ggplot(chd_df, aes(x = bmi_category, y = weight_change)) +
  geom_point(aes(size = rr, color = rr), alpha = 0.8) +
  scale_color_gradient(low = "#fee0d2", high = "#de2d26") +
  labs(x = "BMI区间", y = "体重变化分组", size = "相对风险(RR)",
       color = "相对风险(RR)", title = "体重变化与BMI对冠心病相对风险的影响") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

补充说明

  • 长格式是ggplot2的核心要求,确保每个变量对应一列数据;
  • 两种图表可根据论文的表达重点选择,热图侧重分组对比,点图侧重趋势观察;
  • 可通过调整scale_fill_gradient/scale_color_gradient的颜色参数匹配论文配色风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:50:58