如何为色标每个整数值分配独立颜色并使刻度居中?
解决离散整数数据的颜色区分与色标对齐问题
针对你的0-5整数数据集,原代码的问题在于levels=np.linspace(0,5,6)是把数值作为分界点,而非每个整数单独对应一个颜色区间。以下是修改后的代码,实现每个数值专属颜色且色标刻度居中:
import matplotlib.pyplot as plt import numpy as np fig, axes = plt.subplots(nrows=1, ncols=1, figsize=[10,8]) # 定义每个整数对应的区间边界,确保每个整数单独成块 levels = np.arange(-0.5, 6, 1) # 从viridis色图中提取6种离散颜色,也可以自定义颜色列表如['#440154','#482878',...] cmap = plt.get_cmap('viridis', 6) # 绘图时指定levels、cmap,设置色标刻度与格式 im = agree_all_land.topo.plot(cmap=cmap, levels=levels, extend='neither', cbar_kwargs={ 'ticks': np.arange(0,6), 'spacing': 'proportional', 'orientation': 'vertical' }) axes.set_xlabel('longitude (degrees east)') axes.set_ylabel('latitude (degrees north)') # 可选:确保刻度完全居中对应颜色块 im.colorbar.set_ticklabels(np.arange(0,6)) plt.tight_layout() plt.show()
关键改动说明
- levels设置:用
np.arange(-0.5,6,1)生成[-0.5,0.5,1.5,...,5.5]的边界,这样每个整数n会被分到[n-0.5, n+0.5]区间,确保每个数值对应独立颜色块。 - 离散色图:用
plt.get_cmap('viridis',6)从viridis中提取6种均匀间隔的颜色,也可以替换为自定义颜色列表(比如cmap=['red','green','blue','yellow','purple','orange'])。 - 色标配置:通过
cbar_kwargs指定刻度为0-5,spacing='proportional'保证每个颜色块宽度一致,刻度自动居中对应颜色块。
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

