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

使用wireframe绘制钻石数据集3D曲面图异常问题求助

解决wireframe绘制3D平滑曲面异常的问题

问题原因

直接用diamonds原始散点数据绘制wireframe时,因为数据是非规则网格的离散点,wireframe会尝试连接所有原始数据点,而非生成平滑曲面,这就导致了图中出现大量竖线的异常情况。要绘制带多项式平滑的3D曲面,必须先拟合模型并生成规则网格上的预测值,再用这些预测值绘图。

解决方案步骤

  • 生成覆盖carat和depth取值范围的规则网格数据
  • 拟合包含carat*depth多项式交互项的回归模型
  • 用模型预测网格上的price值
  • 基于预测结果绘制wireframe曲面

完整代码示例

# 加载所需包
library(lattice)
library(ggplot2)

# 1. 创建规则网格数据
# 获取carat和depth的取值范围并生成序列
carat_seq <- seq(min(diamonds$carat), max(diamonds$carat), length.out = 50)
depth_seq <- seq(min(diamonds$depth), max(diamonds$depth), length.out = 50)
grid_data <- expand.grid(carat = carat_seq, depth = depth_seq)

# 2. 拟合多项式交互模型(这里用2次多项式,可按需调整次数)
model <- lm(price ~ poly(carat, 2) * poly(depth, 2), data = diamonds)

# 3. 预测网格上的price值
grid_data$pred_price <- predict(model, newdata = grid_data)

# 4. 绘制wireframe平滑曲面
wf <- wireframe(pred_price ~ carat * depth, data = grid_data,
                shade = TRUE,
                zlab = "Price",
                xlab = "Carat",
                ylab = "Depth",
                scales = list(arrows = FALSE),
                drape = TRUE,
                colorkey = TRUE)
wf

代码说明

  • 规则网格的length.out参数控制曲面精细度,数值越大曲面越平滑,但计算量会相应增加
  • 多项式次数可通过修改poly()函数的第二个参数调整,比如改成3次多项式poly(carat, 3) * poly(depth, 3)
  • drape = TRUE和colorkey = TRUE可添加颜色映射,更直观展示price的变化趋势

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:23