
本文详解如何使用 Colour Science 库将多个色度图元素(如 RGB 色彩空间和普朗克轨迹)统一绘制在同一张 CIE1931 色度图上,核心在于复用 matplotlib 的 axes 对象而非依赖独立绘图函数的 show 参数。
本文详解如何使用 colour science 库将多个色度图元素(如 rgb 色彩空间和普朗克轨迹)统一绘制在同一张 cie1931 色度图上,核心在于复用 matplotlib 的 `axes` 对象而非依赖独立绘图函数的 `show` 参数。
在色彩科学可视化中,常需在同一色度图中对比多种对象——例如同时展示 ITU-R BT.709 与 BT.2020 等主流 RGB 色彩空间的色域边界,以及黑体辐射对应的普朗克轨迹(Planckian Locus),以直观评估白点位置、色域覆盖范围及光源相关色温(CCT)关系。Colour Science for Python 提供了高度封装的绘图函数,但其默认行为是每次调用均创建新图形(figure)和坐标轴(axes),直接链式调用并设置 show=False 并不能实现元素叠加,原因在于各函数彼此隔离,不共享绘图上下文。
正确做法是:显式获取首个绘图返回的 axes 对象,并将其作为参数传入后续绘图函数,从而实现在同一坐标系中逐层绘制。以下是推荐实现方案:
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,
standalone=False # 关键:禁用自动显示与装饰(如标题/网格),便于后续控制
)
# 第二步:在同一 axes 上叠加普朗克轨迹(注意:使用 temperature 子模块)
colour.plotting.temperature.plot_planckian_locus(
axes=ax,
show=True # 此处可设为 True,因已存在 figure/axes;也可设 False,最后统一 plt.show()
)
# 可选:增强可读性(添加图例、网格、标题等)
ax.grid(True, linestyle=':', alpha=0.6)
ax.set_title("BT.709 & BT.2020 Gamuts with Planckian Locus (CIE 1931)", fontsize=12)
plt.show()⚠️ 关键注意事项:
- plot_planckian_locus_in_chromaticity_diagram_CIE1931 已被弃用,应改用 colour.plotting.temperature.plot_planckian_locus 并显式传入 axes;
- 所有后续绘图函数必须接受 axes 参数(检查文档确认支持),且传入的 axes 必须来自 CIE1931 色度图专用绘图函数(如 plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931),否则坐标系不匹配;
- 若需叠加更多元素(如测试色块、白点标记),同样遵循 axes=ax 模式调用对应函数(如 plot_chromaticity_diagram_colourspace 或 plot_sds_in_chromaticity_diagram_CIE1931);
- 建议统一设置 standalone=False 避免重复渲染标题/图例,由主绘图函数统筹视觉样式。
通过该方法,您不仅能精准控制图层顺序与样式,还可灵活导出高分辨率矢量图(plt.savefig('combined.svg', bbox_inches='tight')),满足科研论文与工程报告的出版级要求。










