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

Plotly go.Surface 3D曲面子图单个不显示问题求助

问题原因

第一个子图无法显示的核心问题是z数据维度不匹配:

  • Plotly的go.Surface要求z必须是二维网格矩阵,维度需要和x、y的网格对应(x和y如果是一维数组,z需是[len(y), len(x)]的二维数组;如果x、y是二维数组,z维度要和它们一致)。
  • 你代码里的zrange是一维数组(344,),无法构成3D曲面,因此只有坐标轴显示,没有曲面。
修复方案

将第一个子图的z数据改为二维网格形式,示例如下:

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np


# Initialize figure with 4 3D subplots
fig = make_subplots(
    rows=2, cols=2,
    specs=[[{'type': 'surface'}, {'type': 'surface'}],
           [{'type': 'surface'}, {'type': 'surface'}]])

# 修复第一个子图的数据源:生成二维网格数据
x1 = np.linspace(0, 90, 344)
y1 = np.linspace(0, 100 , 344)
xGrid1, yGrid1 = np.meshgrid(x1, y1)
# 自定义z的计算逻辑,这里示例为x+y的曲面,可根据需求修改
z1 = xGrid1 + yGrid1

# Generate data for other subplots
x = np.linspace(-5, 90, 10)
y = np.linspace(-5, 60, 10)
xGrid, yGrid = np.meshgrid(y, x)
z = xGrid ** 3 + yGrid ** 3

# adding surfaces to subplots.
fig.add_trace(
    go.Surface(x=x1, y=y1, z=z1, colorscale='Viridis', showscale=False),
    row=1, col=1)

fig.add_trace(
    go.Surface(x=x, y=y, z=z, colorscale='RdBu', showscale=False),
    row=1, col=2)

fig.add_trace(
    go.Surface(x=x, y=y, z=z, colorscale='YlOrRd', showscale=False),
    row=2, col=1)

fig.add_trace(
    go.Surface(x=x, y=y, z=z, colorscale='YlGnBu', showscale=False),
    row=2, col=2)

fig.update_layout(
    title_text='3D subplots with different colorscales',
    height=800,
    width=800
)

fig.show()
补充说明
  • 所有go.Surface的z数据都必须是二维结构,这是3D曲面绘制的基础要求——一维数据只能表示一条线,无法形成面。
  • 你可以根据需求修改z1的计算逻辑(比如z1 = np.sin(xGrid1/10) + np.cos(yGrid1/10)等),只要保证z是和x、y网格维度匹配的二维数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:42:20