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

如何用Plotly绘制含任意x,y对的不规则网格等高线图?

Plotly绘制非结构化网格等高线图的实现方法

Plotly原生的contour函数不直接支持非结构化(每个z对应任意x,y对)的网格数据,但可以通过插值将非结构化数据转换为规则网格来实现需求,具体步骤和代码示例如下:

步骤说明

  • 将非结构化的x、y、z二维列表展平为一维数组,便于后续处理
  • 使用插值工具(如scipy.interpolate.griddata)生成规则分布的x、y网格坐标,并据此插值得到对应的z值
  • 使用Plotly的contour函数绘制转换后的规则网格数据

代码示例

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

# 示例非结构化数据
x = [[1,2,3],[1.1,2.2,3.3],[1,1.5,3]]
y = [[1,1.1,1],[2,2,2.2],[3,3.3,3]]
z = [[1,2,3],[4,5,6],[7,8,9]]

# 展平数据
x_flat = np.array(x).flatten()
y_flat = np.array(y).flatten()
z_flat = np.array(z).flatten()

# 生成规则网格
xi = np.linspace(min(x_flat), max(x_flat), 100)
yi = np.linspace(min(y_flat), max(y_flat), 100)
xi, yi = np.meshgrid(xi, yi)

# 插值得到规则网格的z值
zi = griddata((x_flat, y_flat), z_flat, (xi, yi), method='cubic')

# 绘制等高线图
fig = go.Figure(data=go.Contour(
    x=xi[0],  # 规则网格的x轴值(每一行相同)
    y=yi[:,0],  # 规则网格的y轴值(每一列相同)
    z=zi,
    colorscale='Viridis'
))

fig.update_layout(title='非结构化数据转换后的等高线图')
fig.show()

补充说明

Plotly的contour要求输入的x和y必须是严格的规则网格(即每一行的x值完全一致,每一列的y值完全一致),这和Matplotlib直接支持非结构化数据的处理逻辑不同。通过插值转换后,就能用Plotly实现和Matplotlib类似的等高线绘制效果,插值方法可根据需求选择linear、cubic或nearest。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:25:35