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

如何在R语言ggplot2中为不同药物设置多连续色阶

实现分药物的连续色阶矩阵可视化

需求与问题

需要制作矩阵可视化:

  • X轴为潜变量值(1、2、3、4)
  • Y轴对应三种药物(RAS、BB、AA)的各3个水平
  • 矩阵单元格值范围0-1,需根据值大小用渐变色填充,且每种药物对应独立的连续色阶图例

当前代码中每种药物的所有行单元格为单一颜色,无法体现value的数值差异,需调整为按数值生成连续色阶,并为每个药物配置独立图例。

修改后的代码

# 生成数据集
set.seed(123) # 设置随机种子保证结果可复现
df <- data.frame(
  category = rep(c(0,1,2), 12), 
  state = rep(1:4, each=3), 
  value = runif(36), 
  drug = rep(c("RAS", "BB", "AA"), each=12),
  cat_drug = paste(rep(c(0,1,2), 12), rep(c("RAS", "BB", "AA"), each=12), sep="_")
)

# 加载ggplot2
library(ggplot2)

# 绘制分面矩阵图
ggplot(df, aes(x = state, y = category, fill = value, label = round(value, 3))) +
  geom_raster() +
  geom_text(color = "black", size = 3) +
  # 按药物分面,Y轴自由缩放,单列显示
  facet_wrap(~drug, scales = "free_y", ncol = 1) +
  # 为每个药物设置专属渐变色阶
  scale_fill_gradient(
    low = "ivory", high = "saddlebrown", name = "RAS\nValue",
    limits = c(0,1)
  ) +
  scale_fill_gradient(
    low = "pink", high = "darkred", name = "BB\nValue",
    limits = c(0,1)
  ) +
  scale_fill_gradient(
    low = "lightblue", high = "darkblue", name = "AA\nValue",
    limits = c(0,1)
  ) +
  labs(y = "服药依从性水平", x = "潜变量状态") +
  theme_bw() +
  theme(
    axis.text.x = element_text(size = 9),
    axis.text.y = element_text(size = 9),
    strip.text = element_text(size = 10, face = "bold"),
    legend.title = element_text(size = 9),
    legend.position = "right"
  )

关键修改说明

  • 填充映射调整:将fill从映射drug改为映射value,让单元格颜色随数值大小变化
  • 分面布局:使用facet_wrap按药物拆分面板,scales="free_y"确保每个面板只显示对应药物的3个水平,避免Y轴冗余
  • 专属色阶:为每种药物配置从浅到深的渐变(RAS:象牙色→深棕;BB:粉色→深红;AA:浅蓝→深蓝),统一色阶范围0-1保证可比性
  • 细节修正:修正原代码中数据集名称错误(Psi改为df),优化文本大小与显示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:21