Python Matplotlib如何恢复colormap色图默认设置
Matplotlib colormap默认配置恢复方法
问题背景
- 此前调用
set_under('w')设置了低于阈值显示白色的规则后,该配置全局生效,所有绘图中数值小于set_under阈值的部分都会被绘制为白色 - 已知可通过
copy()方法创建色图副本,避免修改全局默认配置,但需要将已被修改的colormap恢复为默认状态,让超出colorbar范围的数值直接映射到colorbar最小/最大边界对应的颜色,而非被替换为自定义的白色
可用解决方案
- 全量重置所有内置colormap:matplotlib 3.5及以上版本可直接执行
plt.colormaps.reload(),一键将所有色图的set_under/set_over/set_bad自定义配置清空,恢复为出厂默认状态,执行后超范围数值会自动匹配色条边界颜色 - 单种色图重置:如果不需要重置全部色图,可直接重新调用
plt.get_cmap('你的目标色图名称')获取该色图的原始默认实例,用新获取的实例覆盖之前被修改的色图变量即可,后续绘图传入该新实例就不会受之前自定义规则的影响 - 低版本兼容方案:如果使用matplotlib 3.5以下版本,直接重启Python内核、重新导入matplotlib即可清空所有全局色图的自定义修改
最佳实践
后续需要自定义色图的超范围显示规则时,优先创建色图副本再修改,不会污染全局配置:
# 先创建副本再修改,不会影响全局默认配置 cmap_custom = plt.get_cmap('viridis').copy() cmap_custom.set_under('w') # 仅在需要用到白色超界显示的绘图任务中传入cmap_custom即可 plt.imshow(data, cmap=cmap_custom, vmin=0, vmax=1)
效果验证代码
执行重置后可运行以下代码验证效果,超范围值不会再显示为白色:
import matplotlib.pyplot as plt import numpy as np # 执行重置 plt.colormaps.reload() # 生成带超出[-1,1]范围值的测试数据 test_data = np.random.randn(12, 12) * 2 plt.imshow(test_data, vmin=-1, vmax=1, cmap='viridis') plt.colorbar(extend='both') plt.show()
内容的提问来源于stack exchange,提问作者tgbnez
相关产品推荐
相关产品推荐

