R语言使用Plotly为3D散点图添加多元多项式回归平面异常如何解决
错误原因
- 拟合模型时使用了全局变量
x1/x2作为自变量,预测时传入的新数据集列名为Temperature/Days,R的predict函数无法匹配到模型要求的自变量,导致预测值完全错误,生成的平面形态异常 - 原有散点图绘制代码存在语法问题(
layout层级的括号未闭合),可能干扰后续图层叠加 - 叠加曲面时未设置透明度,容易遮挡下层散点,影响观察效果
修正代码
第一步:修正模型定义与散点图绘制
# 读取数据(补充你自己的xlsx路径) data <- read_xlsx("你的数据文件路径.xlsx") library(plotly) # 直接用数据框内列名拟合模型,避免变量匹配错误 fit <- lm(Release ~ poly(Temperature, 2, raw = TRUE) + poly(Days, 2, raw = TRUE), data = data) summary(fit) # 绘制散点图,直接引用数据框内列,避免全局变量混淆 fig <- plot_ly(data, x = ~Temperature, y = ~Days, z = ~Release, color = ~Release, type = "scatter3d", mode = "markers") fig <- fig %>% layout( title = "CRF N Release Over Temperatures and Time", scene = list( xaxis = list(title = "Temperature (C)"), yaxis = list(title = "Time (Days)"), zaxis = list(title = "%N Release") ) )
第二步:修正曲面生成与叠加逻辑
# 设置网格分辨率,可根据需要调整 graph_reso <- 1 axis_x <- seq(min(data$Temperature), max(data$Temperature), by = graph_reso) axis_y <- seq(min(data$Days), max(data$Days), by = graph_reso) # 生成预测网格 crf_lm_surface <- expand.grid(Temperature = axis_x, Days = axis_y, KEEP.OUT.ATTRS = FALSE) # 模型变量与新数据集列名完全匹配,可正常预测 crf_lm_surface$release <- predict(fit, newdata = crf_lm_surface) # 转换为矩阵,行对应Temperature(x轴)、列对应Days(y轴) library(reshape2) z_matrix <- acast(crf_lm_surface, Temperature ~ Days, value.var = "release") # 叠加曲面,设置透明度避免遮挡散点 fig <- fig %>% add_trace( z = z_matrix, x = axis_x, y = axis_y, type = "surface", opacity = 0.6, showscale = FALSE # 可关闭曲面的颜色条,避免和散点颜色条冲突 ) fig
内容的提问来源于stack exchange,提问作者Josh Henry
相关产品推荐
相关产品推荐

