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

Plotly 3D Surface图无法显示,Scatter3D正常,求排查方案

Plotly 3D Surface图无法显示的原因及解决方法

核心问题:数据格式要求差异

Scatter3D和Surface图对输入数据的格式要求完全不同:

  • Scatter3D只需要三个一维数组,每个元素对应一个点的(x,y,z)坐标,无论数据是否有规律都能正常渲染。
  • Surface图需要结构化的网格数据:x和y要构成二维网格(可以是两个一维数组搭配对应二维z数组,或是三个二维数组),z值必须对应网格中的每个交叉点。你的代码直接复用了Scatter3D的一维列数据,Plotly无法自动将一维数据转换为网格结构,因此图表无法渲染。

解决方法

方法1:插值生成网格数据(适配非规整散点数据)

如果原始数据是散点形式(X1、X2未构成规整网格),可以用numpy.meshgrid生成网格,再通过插值得到对应的z网格值:

import numpy as np
from scipy.interpolate import griddata
import plotly.graph_objects as go
from plotly.offline import plot

# 生成均匀分布的x、y网格
xi = np.linspace(df.X1.min(), df.X1.max(), 100)
yi = np.linspace(df.X2.min(), df.X2.max(), 100)
Xi, Yi = np.meshgrid(xi, yi)

# 用插值方法(cubic/linear/nearest)生成对应网格的z值
Zi = griddata((df.X1, df.X2), df.Y3, (Xi, Yi), method='cubic')

# 绘制Surface图
trace = go.Surface(x=Xi, y=Yi, z=Zi)
data = [trace]
p2 = dict(data=data)
plot(p2)

方法2:直接整理成网格格式(适配规整网格数据)

如果数据本身就是规整的矩形网格(比如X1有m个唯一值,X2有n个唯一值,且所有组合都存在),可以将X1、X2、Y3重新排列成二维数组:

import plotly.graph_objects as go
from plotly.offline import plot

# 透视数据得到z矩阵
z_matrix = df.pivot(index='X2', columns='X1', values='Y3').values
x_values = df.X1.unique()
y_values = df.X2.unique()

# 绘制Surface图
trace = go.Surface(x=x_values, y=y_values, z=z_matrix)
data = [trace]
p2 = dict(data=data)
plot(p2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:10:36