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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:12:03