如何在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
相关产品推荐
相关产品推荐

