You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:02:43