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

如何正确绘制Plotly曲面图?3个匹配列表的可视化问题

解决Plotly曲面图轴映射错误问题

问题核心

你需要将xs、ys(范围[-12,12])作为曲面的x/y轴坐标,zs(范围[0,1]的概率值)作为z轴,但之前的代码错误传递参数,导致轴映射混乱。

关键原因

Plotly的go.Surface要求:

  • x、y需为二维网格数据(或一维数组,会自动扩展为网格)
  • z需为与x/y维度匹配的二维数组,对应每个网格点的数值
    直接传递散点格式的xs/ys/zs会导致轴逻辑混乱。

解决方案

情况1:xs/ys是散点数据

如果xs、ys是无规则散点,需先通过插值生成规则网格再绘制曲面:

import pandas as pd
import plotly.graph_objects as go
import numpy as np
from scipy.interpolate import griddata

# 生成规则网格
xi = np.linspace(-12, 12, 100)  # 网格点数量可按需调整
yi = np.linspace(-12, 12, 100)
X, Y = np.meshgrid(xi, yi)

# 将散点概率值插值到网格上
Z = griddata((xs, ys), zs, (X, Y), method='cubic')  # 可选linear/nearest插值方法

# 绘制曲面图
fig = go.Figure(data=[go.Surface(
    x=X,
    y=Y,
    z=Z,
    colorscale='Viridis'
)])

# 配置轴标签与范围
fig.update_layout(
    title="概率曲面图",
    scene=dict(
        xaxis_title="X轴",
        yaxis_title="Y轴",
        zaxis_title="概率值",
        zaxis=dict(range=[0, 1])  # 强制概率轴范围为0-1
    )
)

fig.show()

情况2:xs/ys是规则网格的一维坐标

如果xs是x方向的所有唯一值,ys是y方向的所有唯一值,zs是网格展开后的一维数组,直接重塑zs为二维即可:

import plotly.graph_objects as go
import numpy as np

# 生成二维网格
X, Y = np.meshgrid(xs, ys)
# 将zs重塑为与X/Y匹配的二维数组
Z = zs.reshape(X.shape)

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

fig.update_layout(
    title="概率曲面图",
    scene=dict(
        zaxis_title="概率值",
        zaxis=dict(range=[0, 1])
    )
)

fig.show()

之前代码出错原因

  • 第一种写法z=df.values把x/y/z三列数据都当成z轴维度,导致轴范围完全错误。
  • 第二种写法错误将xdata/ydata/zdata都传入z参数,混淆了轴数据与数值数据,导致x轴被错误映射为概率值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:21