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

matplotlib中contour绘图搭配colorbar时范围不准、色彩丢失问题求助

问题原因

你遇到的问题根源是contour和imshow两个绘图元素使用的色彩映射范围不一致,且plt.colorbar()默认绑定最后一个生成的可映射对象(也就是imshow):

  • 第一次不加参数调用plt.colorbar()时,绑定的是imshow,使用Z的全部取值范围,所以colorbar范围和等高线刻度不匹配
  • 改成plt.colorbar(CS)时,colorbar绑定了等高线的范围,但imshow仍使用Z的全范围做色阶映射,和等高线的色彩对应不上,看起来就像丢失了色彩

解决方案

统一两个绘图元素的色彩映射范围即可,修改后的代码如下:

x = np.linspace(4, 11)
y = np.linspace(6, 11)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -bgmm.score_samples(XX)
Z = Z.reshape(X.shape)

plt.style.use('seaborn-white')
# 提前定义等高线层级,提取映射范围上下限
levels = np.logspace(0, 1, 5)
vmin, vmax = levels.min(), levels.max()

CS = plt.contour(X, Y, Z, levels=levels, cmap='RdGy', vmin=vmin, vmax=vmax)
plt.clabel(CS, inline=True, fontsize=8)
# imshow指定和等高线一致的映射范围,保证色彩规则对齐
plt.imshow(Z, extent=[4, 11, 6, 11], origin='lower',
            cmap='RdGy', alpha=0.5, vmin=vmin, vmax=vmax)
# 显式绑定等高线对象,保证colorbar刻度匹配
CB = plt.colorbar(CS)
plt.scatter(X_train[:, 0], X_train[:, 1], s=0.8)
plt.show()

效果说明

调整后contour和imshow使用完全一致的色彩映射区间,超出范围的数值会被自动截断到边界色,既可以保证colorbar范围和等高线层级匹配,也不会出现色彩丢失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:04