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

Plotly 3D曲面图无法显示数据,代码是否存在问题?

解决Plotly 3D曲面图为空的问题

你的代码核心问题是Plotly的3D曲面图要求z是二维网格矩阵,但你现在把z转成了一维矩阵(本质还是单列向量),而且没有构建对应的x-y网格结构,所以曲面无法渲染出来。

解决步骤:

  • 你的原始数据是散点格式(每个x、y对应一个z值),需要先把这些散点插值成网格化的数据(即每个x-y网格点都有对应的z值)
  • 可以用akima包的interp函数完成插值,先安装并加载这个包

修改后的代码:

library(plotly)
library(akima)

# 读取数据
Glaucoma_XYZ <- read.csv("~/Library/CloudStorage/SynologyDrive-Macbook/MSc Project/Glaucoma data XYZ CSV.csv")

# 提取散点数据
x <- Glaucoma_XYZ$Presenting.MD..dB.
y <- Glaucoma_XYZ$Rate.of.progression..dB.year.
z <- Glaucoma_XYZ$Risk.of.vision.loss

# 生成网格并插值(nx/ny控制网格密度,数值越大曲面越精细)
interp_data <- interp(x = x, y = y, z = z, nx = 50, ny = 50)

# 用插值后的网格数据绘制曲面图
plot <- plot_ly() %>%
  add_surface(z = interp_data$z, x = interp_data$x, y = interp_data$y) %>%
  layout(
    title = list(text = "Risk of vision loss based on rate of visual field progression", 
                 font = list(size = 12)),
    scene = list(
      xaxis = list(
        title = list(text = "Presenting MD (dB)", font = list(size = 8)),
        range = c(-24.5, 0.0)
      ),
      yaxis = list(
        title = list(text = "Rate of Progression (dB/year)", font = list(size = 8)),
        range = c(-5.0, -0.5)
      ),
      zaxis = list(
        title = list(text = "Risk of Vision Loss", font = list(size = 8)),
        range = c(0.0, 10.0)
      )
    )
  )

plot

关键说明:

  1. interp函数会把散点x、y转换成均匀分布的网格坐标,同时对z值进行插值填充,生成符合曲面图要求的二维z矩阵
  2. 如果你确认原始数据本身是网格格式(而非散点),可以直接将x、y、y整理成二维矩阵传入,但从你能正常绘制散点图的情况来看,插值是必要步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:26:29