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

Plotly是否有类似Matplotlib的extent参数?坐标轴刻度不一致问题

Plotly 实现类似 Matplotlib extent 参数的效果

Plotly 没有和 Matplotlib imshow 里完全对应的 extent 参数,但可以通过两种方式实现相同的坐标转换(把轴刻度从索引转为千米单位):

方法1:修改 px.imshow 的轴范围与刻度

针对你用 px.imshow 的代码,需要手动覆盖 x、y 轴的范围,并调整轴方向(因为 Plotly 默认 y 轴从上到下递增,和 Matplotlib 相反)。

假设你的 Matplotlib 代码里 extent 参数是 [0, nx*dx/1000, nz*dz/1000, 0](其中 nx 是 x 方向点数,dx 是步长(米)),修改后的 Plotly 代码如下:

import plotly.express as px

# 假设 velocity_model 是你的速度模型数据
fig = px.imshow(velocity_model)

# 计算千米单位的轴最大值
x_max = nx * dx / 1000
z_max = nz * dz / 1000

# 更新轴配置,匹配Matplotlib的extent效果
fig.update_layout(
    xaxis=dict(
        range=[0, x_max],
        title="X (km)"
    ),
    yaxis=dict(
        range=[z_max, 0],  # 反转y轴,让z轴向下递增
        title="Z (km)"
    )
)

fig.show()

方法2:使用 Plotly Graph Objects 的 Heatmap(更直观)

如果用 go.Heatmap,可以直接传入物理坐标数组,不需要手动调整范围:

import plotly.graph_objects as go
import numpy as np

# 生成x、z方向的千米坐标数组
x_coords = np.arange(0, nx*dx/1000, dx/1000)
# z轴向下递增,所以从最大值倒序到0
z_coords = np.arange(nz*dz/1000, 0, -dz/1000)

fig = go.Figure(data=go.Heatmap(
    z=velocity_model,
    x=x_coords,
    y=z_coords,
    colorscale='Viridis'  # 可选,匹配Matplotlib的默认配色
))

fig.update_layout(
    xaxis_title="X (km)",
    yaxis_title="Z (km)"
)

fig.show()

为什么原代码刻度不一致?

Matplotlib 的 extent 参数直接将图像的像素索引映射到你指定的物理坐标范围,而 Plotly px.imshow 默认用数据的行、列索引作为轴刻度,所以必须手动覆盖才能和 Matplotlib 的显示效果对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:33:48