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

为何plotly.Mesh3d无法绘制3D函数?空图问题技术问询

问题分析与解决方案:Plotly Mesh3d绘制3D函数出现空图

问题根源

  1. 维度不匹配:你的代码中x、y、z都是一维数组,直接传入f得到的Z也是一维数组,但Mesh3d需要的是能构成三维网格面的点集合(通常是二维参数化的坐标数组),一维数组无法生成有效的网格结构,所以输出空图。
  2. 对Mesh3d的用途误解:Mesh3d主要用于绘制二维参数化的三维曲面/网格(比如球坐标下由θ、φ参数生成的球面),而不是直接可视化三维标量函数(输入x,y,z输出一个标量值的场)。你提到的氢原子波函数概率密度,本质是通过球坐标转换为二维参数(θ、φ)生成的曲面,符合Mesh3d的输入要求,所以能正常绘制。

修正方案

根据你的需求(可视化三维波动方程t=0时的解析解,即三维标量场),推荐以下两种方式:

方式1:绘制等值面(Isosurface)

适合展示标量场中数值相等的曲面,代码示例:

import numpy as np
import plotly.graph_objects as go

# 定义三维标量函数
f = lambda x, y, z: np.sin(x) * np.sin(y) * np.sin(z)

# 生成三维网格(调整点数控制精度)
x = np.linspace(-5, 5, 20)
y = np.linspace(-5, 5, 20)
z = np.linspace(-5, 5, 20)
X, Y, Z = np.meshgrid(x, y, z)

# 计算每个网格点的函数值
values = f(X, Y, Z)

# 绘制等值面
fig = go.Figure(data=go.Isosurface(
    x=X.flatten(),
    y=Y.flatten(),
    z=Z.flatten(),
    value=values.flatten(),
    isomin=-0.5,
    isomax=0.5,
    opacity=0.5,
    surface_count=5,  # 控制生成的等值面数量
))

fig.show()

方式2:绘制体数据(Volume)

适合展示整个标量场的密度分布,代码示例:

import numpy as np
import plotly.graph_objects as go

f = lambda x, y, z: np.sin(x) * np.sin(y) * np.sin(z)

x = np.linspace(-5, 5, 15)
y = np.linspace(-5, 5, 15)
z = np.linspace(-5, 5, 15)
X, Y, Z = np.meshgrid(x, y, z)
values = f(X, Y, Z)

fig = go.Figure(data=go.Volume(
    x=X.flatten(),
    y=Y.flatten(),
    z=Z.flatten(),
    value=values.flatten(),
    isomin=-0.3,
    isomax=0.3,
    opacity=0.1,  # 调整透明度
    surface=dict(count=10),
))

fig.show()

补充:若仅需绘制二维曲面(固定某一维度)

如果你想固定某个维度(比如z=0),绘制二维函数的曲面,可以用Surface(比Mesh3d更直观):

import numpy as np
import plotly.graph_objects as go

# 固定z=0,定义二维函数
f = lambda x, y: np.sin(x) * np.sin(y) * np.sin(0)

x = np.linspace(-5, 5, 20)
y = np.linspace(-5, 5, 20)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

# 用Surface绘制
fig = go.Figure(data=[go.Surface(x=X, y=Y, z=Z)])
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:25:28