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

如何调整Matplotlib散点图色条范围且保持colormap零值对应白色

解决方法

你只需要在不修改scatter的vmin、vmax参数(保证颜色映射始终以0为中心,零值对应白色)的前提下,手动调整colorbar关联的坐标轴显示范围即可,不需要修改归一化逻辑。

修改后的完整代码如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 61)
y = np.linspace(0, 1, 61)
C = np.linspace(-10, 50, 61)
M = np.abs(C).max() # 保留该参数用于颜色映射,保证0对应白色

fig, ax = plt.subplots(1, 1, figsize=(5,3), dpi=150)
# 这里vmin、vmax保持不变,颜色映射逻辑和原来一致
sc=ax.scatter(x, y, c=C, marker='o', edgecolor='k', vmin=-M, vmax=M, cmap=plt.cm.RdBu_r)
cbar=fig.colorbar(sc, ax=ax, label='$R - R_0$ (mm)')

# 核心修改:手动设置色条的y轴显示范围,截掉小于-10的部分
cbar.ax.set_ylim(bottom=C.min())
# 如果需要更规整的刻度,可以手动指定
cbar.set_ticks([-10, 0, 10, 20, 30, 40, 50])

ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

补充说明

  • 该方法完全不会改变原始数据的颜色映射规则,所有点的颜色和你原有代码的输出完全一致,只是色条不再显示小于-10的空白区间
  • 你之前修改cbar.outline.set_ydata报错是因为新版matplotlib中色条的外框是Polygon对象,不需要单独调整外框,直接修改色条坐标轴的显示范围就会自动裁切外框和色条填充区域,和contourf的表现完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:48:04