使用ListedColormap时如何设置颜色条扩展三角的颜色
解决方法:直接在自定义的ListedColormap上设置极值颜色
问题的核心在于:你之前是给原tab20c设置了under颜色,但随后创建的newcmp是完全基于提取出的newcolors数组生成的新颜色映射,并没有继承原cmap的极值设置。要让扩展三角显示黄色,需要直接在newcmp上配置under属性——正好可以结合你提到的三行关键代码来实现:
tab20c = cm.get_cmap('tab20c', 256) newcolors = tab20c(np.linspace(0, 1, 256)) newcmp = ListedColormap(newcolors).with_extremes(under='yellow')
为什么之前的方法不生效?
当你调用tab20c.with_extremes(under='yellow')时,只是给原颜色映射添加了极值配置,但newcolors = tab20c(np.linspace(0, 1, 256))这行代码只提取了原cmap在**常规数值范围(0到1)**内的颜色,并没有包含under对应的特殊颜色。随后用ListedColormap创建的newcmp是一个全新的映射,默认不会继承原cmap的极值设置,所以你的修改没有传递到最终使用的newcmp上。
完整可运行代码
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from matplotlib.colors import ListedColormap, LinearSegmentedColormap # 修改后的核心三行代码 tab20c = cm.get_cmap('tab20c', 256) newcolors = tab20c(np.linspace(0, 1, 256)) newcmp = ListedColormap(newcolors).with_extremes(under='yellow') # 绘制部分保持不变 mock = np.array([[0.1,0.2,0.3], [0.2,0.3,0.4], [0.3,0.4,0.5], [0.4,0.5,0.6], [0.5,0.6,0.7], [0.6,0.7,0.8], [0.7,0.8,0.9]]) plt.figure(figsize=(6,6)) im = plt.imshow(mock,cmap = newcmp, vmin=0.0, vmax=1) plt.colorbar(im,extend='min') plt.show()
运行这段代码后,颜色条底部的扩展三角就会显示为黄色了。如果你需要更灵活的设置(比如用自定义RGB颜色),只需要把'yellow'替换成类似(1, 1, 0)这样的RGB元组即可。
内容的提问来源于stack exchange,提问作者zabop
相关产品推荐
相关产品推荐

