如何在R语言中绘制展示三因素响应面的三元热图
R语言绘制三元响应面热图方案
你原来的代码主要问题是插值公式没有匹配你定义的三阶交互模型,且插值网格密度不足导致渐变效果不符合预期,以下是调整后的可运行代码:
# 加载所需包 library(ggtern) library(ggplot2) # 构造数据集 X <- rep(c(.45,.4,.55,.4,.43,.5,.43,.5,.43,.48), each = 3) Y <- rep(c(.15, .12,.22,.14,.14,.19,.12, .17,.17,.12 ), each = 3) Z <- rep(c(.15,.22,.12,.12,.19,.14,.14,.17,.12,.17), each = 3) Gi <- c(353,381,320,312,335,265,394,350,374,320,299,316,300,304,295,360,331,395,351,280,342,299,303,279,374,364,419,306,290,315) dt <- data.frame(X, Y, Z, Gi) # 拟合你定义的三阶交互线性模型 mdl <- lm(Gi ~ X*Y*Z, data = dt) # 绘图代码 ggtern(data = dt, aes(x = X, y = Y, z = Z, value = Gi)) + # 调整插值参数:匹配三阶交互模型,提高网格密度使渐变平滑 stat_interpolate_tern( geom = "polygon", formula = value ~ x*y*z, method = lm, n = 200, aes(fill = ..level..), expand = 1 ) + # 调整渐变配色,可按需修改 scale_fill_gradient(low = "green", high = "blue", name = "Gi值") + # 调整散点样式,加黑色边框更醒目 geom_point(fill = "white", size = 3, shape = 21, color = "black") + theme_gray() + theme(tern.axis.arrow.show = TRUE)
关键调整说明
- 插值公式修改为
value ~ x*y*z,完全匹配你定义的Gi和X/Y/Z的三阶交互关联关系 - 新增
n=200参数提高插值网格分辨率,解决原来渐变区域块感强的问题 - 散点增加黑色边框,和渐变背景区分度更高
- 为填充色增加了含义明确的图例标题
如果需要和预期效果更贴近,还可以修改scale_fill_gradient的配色参数,或者调整theme中的轴标签、网格线样式。
内容的提问来源于stack exchange,提问作者Hoang Le
相关产品推荐
相关产品推荐

