5. 色带集合 API¶
ColormapCollection 提供链式筛选、分组、HTML 导出和批量出图。
链式筛选¶
相比 cmap.list() 的一次性传参,链式 .filter() 更灵活、可读性更好。
In [1]:
Copied!
from multicolor import cmap
# 分步筛选:先选内置,再选 sequential,再选色盲安全
result = (
cmap.collection(is_custom=False)
.filter(cmap_type="sequential")
.filter(colorblind_safe="any")
)
print(f"Found {len(result)} colormaps: {result.names}")
from multicolor import cmap
# 分步筛选:先选内置,再选 sequential,再选色盲安全
result = (
cmap.collection(is_custom=False)
.filter(cmap_type="sequential")
.filter(colorblind_safe="any")
)
print(f"Found {len(result)} colormaps: {result.names}")
Found 42 colormaps: ['Autumn', 'Berlin', 'Binary', 'Blues', 'Bone', 'BuGn', 'BuPu', 'Cividis', 'Cool', 'Copper', 'Cubehelix', 'Gist_earth', 'Gist_gray', 'Gist_yarg', 'GnBu', 'Gray', 'Greens', 'Greys', 'Inferno', 'Magma', 'Managua', 'Ocean', 'OrRd', 'Oranges', 'Plasma', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu', 'Reds', 'Spring', 'Summer', 'Turbo', 'Vanimo', 'Viridis', 'Winter', 'Wistia', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd']
In [2]:
Copied!
# 在筛选结果上继续筛选
result = result.filter(source="matplotlib")
print(f"After filtering by source: {result.names}")
# 在筛选结果上继续筛选
result = result.filter(source="matplotlib")
print(f"After filtering by source: {result.names}")
After filtering by source: ['Autumn', 'Berlin', 'Binary', 'Blues', 'Bone', 'BuGn', 'BuPu', 'Cividis', 'Cool', 'Copper', 'Cubehelix', 'Gist_earth', 'Gist_gray', 'Gist_yarg', 'GnBu', 'Gray', 'Greens', 'Greys', 'Inferno', 'Magma', 'Managua', 'Ocean', 'OrRd', 'Oranges', 'Plasma', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu', 'Reds', 'Spring', 'Summer', 'Turbo', 'Vanimo', 'Viridis', 'Winter', 'Wistia', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd']
分组¶
group_by() 按字段分组,返回 {key: ColormapCollection}。
In [3]:
Copied!
# 按类型分组
all_cmaps = cmap.collection(is_custom=False)
groups = all_cmaps.group_by("cmap_type")
for key, group in groups.items():
print(f"{key} ({len(group)}): {group.names}")
# 按类型分组
all_cmaps = cmap.collection(is_custom=False)
groups = all_cmaps.group_by("cmap_type")
for key, group in groups.items():
print(f"{key} ({len(group)}): {group.names}")
qualitative (12): ['Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3', 'Tab10', 'Tab20', 'Tab20b', 'Tab20c'] sequential (56): ['Afmhot', 'Autumn', 'Berlin', 'Binary', 'Blues', 'Bone', 'BuGn', 'BuPu', 'CMRmap', 'Cividis', 'Cool', 'Copper', 'Cubehelix', 'Gist_earth', 'Gist_gray', 'Gist_heat', 'Gist_ncar', 'Gist_stern', 'Gist_yarg', 'GnBu', 'Gnuplot', 'Gnuplot2', 'Gray', 'Greens', 'Greys', 'Hot', 'Hsv', 'Inferno', 'Jet', 'Magma', 'Managua', 'Nipy_spectral', 'Ocean', 'OrRd', 'Oranges', 'Pink', 'Plasma', 'Prism', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'Rainbow', 'RdPu', 'Reds', 'Spring', 'Summer', 'Turbo', 'Vanimo', 'Viridis', 'Winter', 'Wistia', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd'] diverging (17): ['BrBG', 'Bwr', 'Coolwarm', 'Flag', 'Gist_rainbow', 'PRGn', 'PiYG', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Seismic', 'Spectral', 'Terrain', 'Twilight', 'Twilight_shifted']
In [4]:
Copied!
# 按来源分组
source_groups = cmap.collection().group_by("source")
for key, group in source_groups.items():
print(f"{key}: {group.names}")
# 按来源分组
source_groups = cmap.collection().group_by("source")
for key, group in source_groups.items():
print(f"{key}: {group.names}")
matplotlib: ['Accent', 'Afmhot', 'Autumn', 'Berlin', 'Binary', 'Blues', 'Bone', 'BrBG', 'BuGn', 'BuPu', 'Bwr', 'CMRmap', 'Cividis', 'Cool', 'Coolwarm', 'Copper', 'Cubehelix', 'Dark2', 'Flag', 'Gist_earth', 'Gist_gray', 'Gist_heat', 'Gist_ncar', 'Gist_rainbow', 'Gist_stern', 'Gist_yarg', 'GnBu', 'Gnuplot', 'Gnuplot2', 'Gray', 'Greens', 'Greys', 'Hot', 'Hsv', 'Inferno', 'Jet', 'Magma', 'Managua', 'Nipy_spectral', 'Ocean', 'OrRd', 'Oranges', 'PRGn', 'Paired', 'Pastel1', 'Pastel2', 'PiYG', 'Pink', 'Plasma', 'Prism', 'PuBu', 'PuBuGn', 'PuOr', 'PuRd', 'Purples', 'Rainbow', 'RdBu', 'RdGy', 'RdPu', 'RdYlBu', 'RdYlGn', 'Reds', 'Seismic', 'Set1', 'Set2', 'Set3', 'Spectral', 'Spring', 'Summer', 'Tab10', 'Tab20', 'Tab20b', 'Tab20c', 'Terrain', 'Turbo', 'Twilight', 'Twilight_shifted', 'Vanimo', 'Viridis', 'Winter', 'Wistia', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd']
HTML 报告导出¶
to_html() 生成包含色带可视化预览的 HTML 页面。
In [5]:
Copied!
import os
from IPython.display import IFrame
collection = cmap.collection(is_custom=False).filter(colorblind_safe="any")
print(f"Exporting {len(collection)} colormaps to HTML...")
# 保存到 notebook 同目录下,执行后可直接打开
path = os.path.join(os.getcwd(), "colorblind_report.html")
collection.to_html(path, cols=3, title="Colorblind-Safe Colormaps")
print(f"Saved to: {path}")
# 在 Jupyter 中直接内嵌预览
IFrame(path, width=800, height=600)
import os
from IPython.display import IFrame
collection = cmap.collection(is_custom=False).filter(colorblind_safe="any")
print(f"Exporting {len(collection)} colormaps to HTML...")
# 保存到 notebook 同目录下,执行后可直接打开
path = os.path.join(os.getcwd(), "colorblind_report.html")
collection.to_html(path, cols=3, title="Colorblind-Safe Colormaps")
print(f"Saved to: {path}")
# 在 Jupyter 中直接内嵌预览
IFrame(path, width=800, height=600)
Exporting 53 colormaps to HTML... Saved to: /home/runner/work/multicolor/multicolor/docs/examples/colorblind_report.html
Out[5]: