如何将Seaborn颜色调色板转换为Matplotlib连续颜色映射(cmap)?
如何将Seaborn预定义调色板转换为Matplotlib连续颜色映射(cmap)
嘿,我明白你的问题了——你当前用ListedColormap生成的是离散颜色映射,哪怕把n设得很大也只是模拟连续效果,并非真正的平滑渐变。其实Seaborn本身就提供了直接获取连续Matplotlib颜色映射的方式,不用绕弯子!
问题根源
你用的ListedColormap是为离散颜色集合设计的,它会把传入的颜色列表当成独立的色阶,不会在颜色之间生成平滑的过渡渐变。哪怕把n设为100,本质上还是100个离散颜色的拼接,不是真正的连续cmap。
正确解决方案
使用seaborn.color_palette()的as_cmap=True参数,直接返回原生的Matplotlib连续Colormap对象,一步到位:
import seaborn as sns import matplotlib.pyplot as plt import numpy as np # 直接获取连续颜色映射,无需ListedColormap cmap = sns.color_palette("RdBu_r", as_cmap=True) # 设置缺失值(bad data)的显示样式 cmap.set_bad(color='black', alpha=0.5) # 用heatmap测试效果(生成带缺失值的随机数据) data = np.random.randn(10, 10) data[2:4, 2:4] = np.nan sns.heatmap(data, cmap=cmap) plt.show()
额外说明
- 这个方法对Seaborn所有预定义调色板都适用:不管是发散型(如
RdBu_r)、连续型(如viridis)都能直接转成连续cmap; - 如果是定性型调色板(如
Set2),本身就是离散分类的,转连续意义不大,还是用ListedColormap更合适; - 生成的连续cmap完全兼容所有Matplotlib的绘图函数,不止
seaborn.heatmap,像plt.imshow这类函数也能直接使用。
内容的提问来源于stack exchange,提问作者Codedorf
相关产品推荐
相关产品推荐

