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

Matplotlib 3.5.2中pcolormesh+TwoSlopeNorm如何保持刻度等距?

解决Matplotlib 3.5.2中TwoSlopeNorm色卡刻度不均问题

Matplotlib 3.5.x版本对TwoSlopeNorm配合colorbar的刻度生成逻辑做了调整:新版本会强制将vcenter放在色条的视觉中点,导致vmin到vcenter与vcenter到vmax的刻度间距不等,而3.4.3版本则保持vmin到vmax全程等距刻度。要在3.5.2中还原旧版效果,可通过以下两种方法实现:

方法一:手动生成等距刻度

直接计算并指定从vmin到vmax的等距刻度数组:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors

fld = np.random.random((10,10)) - 0.2

norm = colors.TwoSlopeNorm(vmin=-0.2, vcenter=0, vmax=0.8)

plt.pcolormesh(fld, norm=norm, cmap='bwr')
# 生成vmin到vmax的等距刻度,示例设置6个刻度点
ticks = np.linspace(norm.vmin, norm.vmax, num=6)
plt.colorbar(ticks=ticks)
plt.show()

方法二:使用线性刻度定位器

利用LinearLocator自动生成等距刻度,无需手动计算刻度值:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import LinearLocator

fld = np.random.random((10,10)) - 0.2

norm = colors.TwoSlopeNorm(vmin=-0.2, vcenter=0, vmax=0.8)

plt.pcolormesh(fld, norm=norm, cmap='bwr')
# 指定生成6个等距刻度
plt.colorbar(ticks=LinearLocator(numticks=6))
plt.show()

两种方法都能保留TwoSlopeNorm以0为色卡中点的映射逻辑,同时让colorbar刻度在-0.2到0.8区间内保持等距分布,与3.4.3版本的显示效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:23