日期:2026-10-04(夜间窗口第二批)。范围:ROADMAP M4 “viz 首批 8 图型(COSMIC 调色板、规范序、矢量输出)”;CAPABILITY-MATRIX L-F 表(首批 8 图 M4)。exposure UMAP 与全集图型不在本批。
§1 冻结的 8 图(文件 R/viz-profile.R + R/viz-exposure.R + R/viz-similarity.R + R/viz-palette.R)
-
plot_catalog_profile()——样本/签名 SBS96 谱图(bar,逐通道替换类着色、类组分隔线、5’侧翼标签旋转)。也接受 DBS78/ID83 通道空间(palette 表扩展);其余表 M7。 -
plot_signature_catalog()——多签名小倍数(facet 网格,逐签名一版面,同 1 的语义)。 -
plot_reference_comparison()——估计谱 vs 参考谱双柱对比(同通道并排)。 -
plot_reconstruction_panel()——原始 vs 重构 + 逐通道残差(上:两谱重叠;下:残差条带,红正蓝负)。 -
plot_exposure_stacked()——逐样本暴露堆叠柱(列和=负荷;签名按字典序或用户序)。 -
plot_exposure_heatmap()——暴露热图(样本×签名,share 归一口径可选)。 -
plot_similarity_heatmap()——余弦热图(ms_compare 的 metrics$cosine 直读;对角 1)。 -
plot_cosmic_scatter()——估计 vs COSMIC 参考谱点图(y=x 线 + cosine 注记)。
统一语义(L-F 规范): - 调色板 [V]:COSMIC SBS6 类色值逐字节取自已核实的上游 sigProfilerPlotting.py plotSBS(L2895–2902,本批 fetch 锚定):C>A=[3,189,239]/256(浅蓝)、C>G=[1,1,1]/256(黑)、C>T=[228,41,38]/256(红)、T>A=[203,202,202]/256(灰)、T>C=[162,207,99]/256(绿)、T>G=[236,199,197]/256(粉)。注意与 research/04 §行”(C>A 绿…)“的旧笔记顺序不同——以源码色值数组顺序为准(源码数组按 C>A,C>G,C>T,T>A,T>C,T>G 块序与 16 通道块一一对应);DBS78/ID83 palette 本批不冻结(M7)。research/04 笔误修正记录于本节。 - 规范序强制:任何 96 通道输入先过 .ms_io_resolve_table 同款标签校验(复用 io-catalog.R internal helper),失配结构化报错——viz 不静默重排。 - 矢量一等:全部 ggplot2 对象返回(不落盘);ggsave 由用户调用(cairo/svglite 为 Suggests 惰性)。测试层 ggsave 非空 PNG(calibrate-plot 先例)。 - DBS78/ID83 palette:plot_catalog_profile 对这两表给简化单色 + 类分隔(palette 冻结推 M7,如实标注)。
§2 语义边界
- 输入是 share 矩阵(列和 1)或计数:
mode = c("share", "count")默认 share;count 模式 y 轴标 “mutations”。 - similarity 热图直接吃 ms_compare()@metrics$cosine(dimnames 齐则复用)。
- 不做主题定制 API(theme_cosmic() 本批给固定极简版:strip 文本加粗 + x 轴 90° 标签),自定义走 ggplot2 原生 +。
- ggplot2 为 Suggests(calibrate-plot 先例:惰性加载、缺席结构化报错)。
§3 验收锚
- 调色板字面钉测(6 色 RGB 各通道 == 源码 3/256 等值);
- 规范序失配 → input 结构化(乱序矩阵拒绝);
- 层结构断言(GeomBar/GeomTile/GeomPoint 存在性,calibrate-plot 先例);
- 残差面板数值正确(重构 = sigs %*% expo,残差 = counts − fitted,手造 fixture 全数字);
- 真实数据渲染 + ggsave 非空 PNG(SBS96 真实 COSMIC v3.6 签名导入直绘);
- DBS78/ID83 单色降级路径渲染成功。