本文详解如何使用 Colour Science 库将多个色度图元素(如 RGB 色彩空间和普朗克轨迹)统一绘制于同一张 CIE 1931 色度图中,核心在于复用 matplotlib 的 axes 对象而非依赖独立绘图函数的 show 参数。
本文详解如何使用 colour science 库将多个色度图元素(如 rgb 色彩空间和普朗克轨迹)统一绘制于同一张 cie 1931 色度图中,核心在于复用 matplotlib 的 `axes` 对象而非依赖独立绘图函数的 `show` 参数。
在 Colour Science 中,各类色度图绘制函数(如 plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931 和 plot_planckian_locus_in_chromaticity_diagram_CIE1931)默认会创建新图形(figure)和坐标轴(axes),并自动调用 plt.show()。若直接连续调用且设置 show=False,第二幅图仍会清空或覆盖前一幅图——这是因为它们各自管理独立的绘图上下文,无法天然叠加。
正确做法是显式获取并复用同一组 axes。具体流程如下:
- 首先调用任一绘图函数(推荐从色彩空间开始),传入 show=False,并捕获其返回的 (figure, axes) 元组;
- 将该 axes 对象作为参数传递给后续绘图函数(注意:需使用底层模块中支持 axes 参数的版本,例如 colour.plotting.temperature.plot_planckian_locus);
- 最后统一调用 plt.show() 显示整合后的图形。
以下是完整可运行示例:
import colour
import matplotlib.pyplot as plt
# 第一步:绘制 RGB 色彩空间,不显示,获取 axes
fig, ax = colour.plotting.plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931(
["ITU-R BT.709", "ITU-R BT.2020"],
show=False,
chromaticity_diagram_callable=colour.plotting.plot_chromaticity_diagram_CIE1931 # 确保底层色度图一致
)
# 第二步:在同一 axes 上叠加普朗克轨迹(注意使用 temperature 模块下的函数)
colour.plotting.temperature.plot_planckian_locus(
axes=ax,
show=True, # 此处 show=True 仅控制最终显示,不影响叠加逻辑
locus_colours='black',
locus_kwargs={'linewidth': 1.2}
)
# 可选:添加光源点(如标准照明体 A、D65)
illuminants = ['A', 'D65']
colour.plotting.plot_chromaticity_diagram_colourspace_visualization(
illuminants=illuminants,
axes=ax,
plot_kwargs={'marker': 'o', 'markersize': 8, 'color': 'red'}
)
plt.show()⚠️ 注意事项:
- 不要混用高层封装函数(如 plot_planckian_locus_in_chromaticity_diagram_CIE1931)与底层 axes 接口——后者未暴露 axes 参数;应改用 colour.plotting.temperature.plot_planckian_locus 并手动指定 chromaticity_diagram_callable;
- 所有叠加操作必须基于同一个 axes 实例,确保坐标系、刻度、图例等完全对齐;
- 若需自定义样式(颜色、线宽、标记),优先通过各函数的 *kwargs(如 locus_kwargs, plot_kwargs)传入,避免后续手动修改 ax 属性导致逻辑耦合;
- 建议显式导入 matplotlib.pyplot 并最后调用 plt.show(),以增强代码可控性与调试便利性。
通过该方法,你不仅能实现 RGB 色域与黑体辐射轨迹的精准叠加,还可进一步扩展至光源点标注、色差椭圆、自定义色块等多层可视化任务,为色彩科学分析提供高度灵活的图形表达能力。










