为何matplotlib的resampled方法返回ListedColormap与LinearSegmentedColormap?
为什么matplotlib中
viridis.resampled()返回ListedColormap,而copper.resampled()返回LinearSegmentedColormap? 问题背景
执行以下代码后,发现两个resampled()调用返回了不同类型的色图对象:
import matplotlib as mpl from matplotlib.colors import LinearSegmentedColormap, ListedColormap print(mpl.colormaps['viridis'].resampled(100)) print(mpl.colormaps['copper'].resampled(100))
输出结果示例:
<matplotlib.colors.ListedColormap object at 0x123456789> <matplotlib.colors.LinearSegmentedColormap object at 0x987654321>
原因解析
核心原因是这两个内置色图的原始类型本身就不同,resampled()方法会根据原色图的类型返回对应类型的新对象:
viridis是ListedColormap类型
这类色图本质是一组预定义的离散颜色列表,没有内置的连续颜色插值逻辑。调用resampled(n)时,Matplotlib会从原颜色列表中插值生成n个新的离散颜色点,最终用这个新颜色列表创建新的ListedColormap对象——它依然是离散的颜色集合。copper是LinearSegmentedColormap类型
这类色图基于颜色渐变的分段规则定义(比如从黑色到铜色的过渡锚点),内部存储的是颜色节点和插值算法。调用resampled(n)时,只是调整了色图的采样密度(生成颜色时用n个点采样渐变),但没有改变其连续渐变的本质,因此仍然返回LinearSegmentedColormap对象,它依然支持对任意数值进行颜色插值。
验证原色图类型
可以通过以下代码确认两者的原始类型:
print(type(mpl.colormaps['viridis'])) # 输出:<class 'matplotlib.colors.ListedColormap'> print(type(mpl.colormaps['copper'])) # 输出:<class 'matplotlib.colors.LinearSegmentedColormap'>
内容的提问来源于stack exchange,提问作者Yongwu Xiu
相关产品推荐
相关产品推荐

