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

如何重新缩放pcolormesh绘图的坐标轴优化扁平图形显示

解决pcolormesh绘图y轴扁平问题

问题背景

使用pcolormesh绘制图形时,因x轴范围(0-5)与y轴范围(0-0.002)差异极大,导致图形呈现扁平状态,原始代码及数据如下:

原始代码

fig, ax = plt.subplots()
ax.pcolormesh(Omega_re, Omega_im, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
ax.set_aspect(1)
fig.show()

数据

Omega_re = array([[2.  , 2.75, 3.5 , 4.25, 5.  ], [2.  , 2.75, 3.5 , 4.25, 5.  ],
       [2.  , 2.75, 3.5 , 4.25, 5.  ], [2.  , 2.75, 3.5 , 4.25, 5.  ],
       [2.  , 2.75, 3.5 , 4.25, 5.  ]])

Omega_im = array([[0. , 0. , 0. , 0. , 0. ], [0.0005, 0.0005, 0.0005, 0.0005, 0.0005],
       [0.001 , 0.001 , 0.001 , 0.001 , 0.001 ], [0.0015, 0.0015, 0.0015, 0.0015, 0.0015],
       [0.002 , 0.002 , 0.002 , 0.002 , 0.002 ]])

brightness = array([[4.05649772, 3.7299948 , 2.61262439, 4.2841897 , 3.40368949],
                    [4.05649076, 3.72997624, 2.61258381, 4.2841071 , 3.40353591],
                    [4.05648399, 3.72995772, 2.61254052, 4.28402084, 3.40338229],
                    [4.05647716, 3.72993901, 2.6124984 , 4.28393373, 3.40322865],
                    [4.05647025, 3.72992049, 2.61245428, 4.2838476 , 3.40307499]])

解决方案

1. 取消固定宽高比

直接移除ax.set_aspect(1),让matplotlib自动适配轴比例,这是最简便的方法:

fig, ax = plt.subplots()
ax.pcolormesh(Omega_re, Omega_im, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
# 移除固定宽高比设置
fig.show()

2. 设置自定义宽高比

手动指定合适的aspect值,放大y轴的视觉占比:

fig, ax = plt.subplots()
ax.pcolormesh(Omega_re, Omega_im, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
# 根据轴范围计算比例,让y轴视觉宽度更合理
x_range = 5 - 0
y_range = 0.002 - 0
ax.set_aspect(x_range / y_range * 0.1)  # 0.1为调整系数,可按需修改
fig.show()

也可以直接设置经验值,比如ax.set_aspect(100),快速放大y轴显示。

3. 调整图形整体尺寸

创建子图时指定更大的高度,给y轴更多展示空间:

# 设置宽8、高6的画布,尺寸可按需调整
fig, ax = plt.subplots(figsize=(8, 6))
ax.pcolormesh(Omega_re, Omega_im, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
ax.set_aspect(1)
fig.show()

4. 缩放y轴数据后修改刻度标签

将y轴数据放大后绘图,再把刻度改回原始值,实现视觉上的y轴放大:

fig, ax = plt.subplots()
# 将y轴数据放大1000倍后绘图
ax.pcolormesh(Omega_re, Omega_im * 1000, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
ax.set_aspect(1)
# 手动设置刻度标签为原始值
ax.set_yticks([0, 0.5, 1, 1.5, 2])
ax.set_yticklabels([0, 0.0005, 0.001, 0.0015, 0.002])
fig.show()

内容的提问来源于stack exchange,提问作者Projetos Programação

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:27:44