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

如何用Python从复数数据生成3D图?解决空图报错问题

解决Plotly 3D曲面图空图问题及复数函数可视化方案

空图问题的根源

你的代码出现空图有两个核心问题:

  1. 数据长度不匹配:x和y各有4个元素,但z只有3个,Plotly无法找到每个(x,y)对应的z值,导致无法渲染。
  2. Surface要求二维网格数据:go.Surface需要输入二维数组(N×M)来表示网格上的点,而你用的是一维列表,不符合曲面图的数据格式要求。

修复后的代码示例

下面是修正后的代码,先生成标准的二维网格,再计算每个网格点对应的复数Z的模值:

import plotly.graph_objs as go
import numpy as np

# 生成Re(ω)和Im(ω)的二维网格
re_omega = np.linspace(0.1, 0.5, 10)  # 实部范围,10个采样点
im_omega = np.linspace(0.1, 0.7, 10)  # 虚部范围,10个采样点
x, y = np.meshgrid(re_omega, im_omega)

# 模拟你的复数函数(替换成你实际的函数逻辑)
def compute_z(omega):
    # 示例计算逻辑,替换为你的真实函数
    return 1.817 - 0.003*(omega.imag) + 0.0017j * (1 - 0.05*omega.imag)

# 计算每个网格点的Z模值
z_mag = np.abs(np.vectorize(compute_z)(x + 1j*y))

# 创建曲面图
fig = go.Figure(data=[go.Surface(z=z_mag, x=x, y=y)])

fig.update_layout(
    title='Frequências',
    scene=dict(
        xaxis_title='Re(ω)',
        yaxis_title='Im(ω)',
        zaxis_title='|Resíduo|'  # 明确标注为模值
    )
)
fig.show()

复数函数的可视化方案选择

3D图只能直接展示一个实数值维度,针对你的需求,推荐几种实用方案:

  • 仅绘制模值:如上面的代码,适合关注复数的幅度大小,是最常用的选择。
  • 绘制实部或虚部:把z_mag换成np.real(z)或np.imag(z),单独展示实部/虚部的分布。
  • 结合颜色映射增强信息:用高度展示模值,颜色展示实部(或虚部、相位),一张图同时呈现两个维度:
# 计算复数Z的实部作为颜色映射依据
z_real = np.real(np.vectorize(compute_z)(x + 1j*y))

fig = go.Figure(data=[go.Surface(
    z=z_mag, 
    x=x, 
    y=y,
    surfacecolor=z_real,  # 用实部作为颜色区分
    colorbar=dict(title='Re(Resíduo)')
)])

fig.update_layout(
    title='Frequências(高度=模值,颜色=实部)',
    scene=dict(
        xaxis_title='Re(ω)',
        yaxis_title='Im(ω)',
        zaxis_title='|Resíduo|'
    )
)
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:00:19