如何在matplotlib.pyplot中创建自定义N色cmap并避免颜色重复问题
问题原因
仅通过ListedColormap定义颜色列表时,Matplotlib默认会对数据值域做线性插值映射,若未绑定颜色与数值的对应规则,就会出现颜色重复、插值变色的问题。
你遇到的异常绘图效果如下:
解决方案
搭配BoundaryNorm手动指定数值区间和颜色的一一对应关系,即可强制色卡严格按照定义的颜色显示,不做插值处理:
- 二分类离散数据场景:如果你的数据是仅包含0、1两类的离散值,参考代码如下:
import matplotlib.pyplot as plt from matplotlib import colors import numpy as np # 定义自定义色卡 cmap = colors.ListedColormap(['#e3eeee', '#3c0736']) # 绑定数值与颜色的对应规则:[-0.5, 0.5]匹配第一个颜色,[0.5, 1.5]匹配第二个颜色 bounds = [-0.5, 0.5, 1.5] norm = colors.BoundaryNorm(bounds, cmap.N) # 绘图示例 test_data = np.random.randint(0, 2, size=(10,10)) plt.imshow(test_data, cmap=cmap, norm=norm) plt.colorbar(ticks=[0,1]) plt.show()
- 连续数据按阈值分色场景:如果你的数据是连续值,仅需修改
bounds中的分界值即可,比如要以数值5为分界,小于5用第一个颜色、大于等于5用第二个颜色,将bounds修改为[test_data.min(), 5, test_data.max()]即可。
内容的提问来源于stack exchange,提问作者Mohamed Hachaichi
相关产品推荐
相关产品推荐

