出版级图表规则
一份确保科学图表正确、可读、内部一致的检查清单。本技能不强制统一视觉风格——框架、字体和调色板均为参数。在绘图之前,请遵循下面的Notebook调用并执行apply_figure_style()。
开放科学Notebook调用
每个notebook_execute请求,若其code使用了本技能中命名的函数,则应包含此技能ID:
{ "kernelSkillIds": ["figure-style"], "code": "apply_figure_style()\n..." }
kernelSkillIds包含技能ID;函数调用应位于code中。此请求已完整编写:直接调用指定函数,无需添加导入或发现步骤。
§0 适用范围
加载触发(与系统提示的“出版级图表”部分相同规则):本技能适用于最终交付的图表——即用于报告、论文或导出的图表,或保存为用户保留的工件——而非探索性/中间图(快速预览、EDA、完整性检查),这些图被简单绘制而不应用本技能。一旦加载,下文中的“每张图表”是指您为交付件渲染的每一张图表。
§1–§3、§8和§9属于正确性——它们适用于每张图表、每个上下文,且不含美学内容。§4–§7属于指导——默认值可产生清晰结果,但可由有意的替代项覆盖(§4–§7中论述事实/知觉不变量的具体规则——例如§4.4语义零居中、§4.5 CVD、§6.9引导锚定——仍须遵守)。单独使用本技能是内层(使一张图表良好);figure-composer和paper-narrative提供多面板和整篇论文的上下文。
§1 数据保真度与内部自洽性
1.1 排除行。 在源数据中被标记为排除或标记的行,要么完全省略,要么以视觉上不同的空心/影线标记绘制,并在图例中命名。它绝不进入与包含行一起绘制的汇总统计量。
1.2 仅可比较条件。 在不可比较条件下(不同N、周期预算、初始化、协议)测量的组别,不应作为视觉对等体绘制。使用分面分割或标签上的标记将其分开,并在图注中说明一次差异。
1.3 内部自洽性。 图表中的每个图例、阈值和标题必须由每个绘制的行满足。保存前,将每个分类结果标签回溯到定义它的规则;如果某个行的值与其标签或标题矛盾,则图表错误,而非数据错误。
1.4 声明式标题必须为真。 句子式标题(§5.1)在渲染前,需针对坐标轴上的每个类别进行验证。若任何类别与标题矛盾,则限定标题(“在4对中的3对上”)或降级为描述。
1.5 说明n值和固定条件。 每张绘制汇总标记的面板需说明n值和重复单位;每个保持变量固定的小型多重图需说明固定值——在面板中,或当§2预算紧张时,在图注中说明。
1.6 参考结构即为参考。 作为_上下文_绘制的树、排序或拓扑图(如比例尺、类别条)应使用既定参考,而非从所绘数据推断。仅当结构_本身_是结果时,才可推断结构。
1.7 每个声明一个数值。 定量声明(运行时间、准确率、计数)在每个面板、图注和摘要中恰好有一个规范值。定义其测量内容,并在所有地方使用该值。
§2 标签经济性——下限与上限
图表显示模式;图注承载上下文。为一般科学读者而非作者设计。
2.1 下限(不可移除)。 每个不同的标记、系列、字形或比较对象必须能仅从图表本身识别。图注解释_为何重要_,而非_是什么_。如果删除标签会使读者问“那是什么?”,则该标签不可移除;只有当问题变为“为什么放在那里?”时,标签才可移除。比较对象标签需命名具体事物(“先前方法”、“无联合训练”),绝不用裸角色词(“基线”、“先前”)。任何一般科学读者无法理解的术语需添加一个单词的注释。
2.2 上限。 每个面板:标题 + 坐标轴标签 + 刻度标签 + 系列标识(每行小型多重图标记一次) + 至多2-3个结果注释。统计字符串数目;超过6个(除坐标轴/刻度外)表示过多。上限计数的是_叙述性_注释(标注、数值标签、括号)——标识标签属于下限,不占预算。
2.3 移至图注: n值、固定条件、缩写展开、不可比较脚注、排除理由、方法学注意事项。
2.4 标题应为要点。 仅看标题的读者应能知道面板显示的内容。“对基因丢失具有鲁棒性”通过;“更少的基因”失败。测试:大声冷读——如果听者问“更少的基因_什么_?”,则重写。对于某一变量变化的一行小型多重图,删除每个面板的标题,使用一个行标题。
2.5 仅在头条数字上使用值-标记——即读者会引用的那个数字。其他数值均从坐标轴读取。
2.6 如有疑问,删除标签并重新阅读。 如果信息量保持不变,则保留删除状态。
§3 坐标轴、比例尺、小型多重图
当现有坐标轴需要与全图设置不同的框架时,调用set_frame(ax, style=...)。
3.1 坐标轴内边距。 坐标轴界限应在每侧超出数据至少一个标记半径;标记和文本绝不接触脊柱。绘图后使用ax.margins(0.04),或扩展界限超过任何注释。
3.2 使用坐标轴断裂而非浪费范围。 当数据占据坐标轴的<40%时,断裂坐标轴或从数据底部开始,并加上清晰的非零刻度。绝不要在断裂坐标轴间隙内绘制参考线、阈值或注释——该间隙没有坐标。
3.3 对数坐标轴使用人类可读刻度——如10²、10³或1k / 10k / 100k,而非原始指数。绝不要在对数缩放的值坐标轴上绘制填充柱状图(柱状图长度编码与任意底部的比率);改用点加中位数标记。
3.4 小型多重图共享坐标轴。 一行或一列小型多重图仅在外侧面板(最左侧/最底部)显示刻度标签;内部面板保留刻度但删除标签。当面板共享y轴且仅x变量不同时,将其渲染为相邻子图(wspace≤0.06),使用一个行标题。
3.5 填满方框。 面板的数据范围应占据其分配矩形的≥75%。如果面板的自然宽高比留下空白带,则重新调整网格(行跨度、堆叠互补面板)——不要填充面板。
3.6 优劣方向。 当更高或更优从坐标轴标签中不明显时,在边距中放置一个小的竖直提示(“higher = better”)——每行面板一次,绝不在每个面板中,并且绝不仅在图注中。嵌入旋转文本的方向性字形会随文本旋转;应将提示设置为竖直方向。goodness_arrow(ax, ...)用于放置此提示。
3.7 物理宽度。 300 dpi下的单行图表应适合出版物的双栏宽度。添加示意图或标签不应使数据面板比之前更窄。
§4 颜色
4.1 线程化。 颜色一旦绑定到某个实体(方法、特征、条件),就在整个图表中为该实体代表的每个标记(线条、填充、标记、文本、热图行)重复使用完全相同的颜色。颜色_即_交叉引用;读者绝不应查阅图例两次。
4.2 限制色相。 根据数据需要,使用尽可能少的独立色相。当图表比较一个焦点系列与其他系列时,使焦点系列在视觉上占主导(饱和、较粗),并让比较对象具有较低的视觉权重(去饱和、较浅或较细)。焦点色相不得与同一图表中使用的分类调色板中的任何色相重合。即使焦点系列的标记宽度为零或与其他标记重合,也必须保持可识别性——通过轮廓、标记或浅色阴影带。使用focal_palette(...)将焦点和比较对象的颜色绑定到有序标签。
4.3 分层类别。 当类别嵌套时(组内分组),外层选择色相族,内层在其内部采样。
4.4 连续与发散。 对一般连续值使用感知均匀的连续色阶图;对有序等级或大小使用单色相渐变;对有符号量使用发散色阶图——始终居中于语义上有意义的零点(0、1.0或中位数),而非数据中点。
4.5 CVD安全性。 绝不要依赖红/绿对比进行二分或对立区分。任何二分对应在模拟绿色盲时仍应可区分。保留一个警告色相用于错误/异常/扰动标记,并且不要将其重复用作数据系列颜色。
4.6 两个调色板,两个图例。 当图表使用两个分类颜色系统时,每个图例应置于其调色板适用的第一个面板附近。
§5 排版
5.1 句子式标题。 面板标题用通俗语言陈述比较,常规字重,左对齐。指标名称放在坐标轴而非标题中。
5.2 角色映射的字体大小层级。 一张图表使用至多三种字体大小,按_角色_而非空间映射:标题/坐标轴标签/系列标识使用基准大小;图例/注释文本小一级;刻度标签再小一级。面板字母是唯一例外(粗体、较大)。如果标签在其角色大小下无法容纳,则调整布局或缩短文本——不要使用中间大小。apply_figure_style(sizes=(8,7,6))设置层级。当需要一行辅助元数据时,使用two_tier_label(name, meta)构建两行文本。
5.3 命名法。 科学惯例中应斜体的物种、基因和变量名,需斜体。缩写代码继承此规则;首次出现时展开一次。
5.4 量级后缀。 大数值使用k / M / B(4.2B、120 kb),而非逗号分组的完整数字。
5.5 数值注释。 标记上的数字最多使用2位有效数字——除非2位有效数字的舍入会使两个不同行打印出相同值,此时显示区分它们的数字。填充标记上的文字需达到≥4.5:1的对比度;若未达到,将文字置于标记外部。
5.6 无内部代码。 坐标轴标签使用通俗名称;代码库缩写仅出现在可读名称后的括号中或图注中。比较对象系列需以其_是什么_来标记,而非角色词。
5.7 面板字母。 粗体、左上角、位于坐标轴框外。大小写遵循目标刊物的惯例;panel_letter(ax, 'a', case=...)可处理两种情形。
§6 图表类型指导(按数据形态)
6.1 分类×数值。 显示分布,而不仅是汇总。图表选择遵循n:小n使用带中位数标记的抖动带状图;大n使用箱线图或小提琴图;平均值是信息时使用柱状图加叠加原始点或柱状图加区间。对于抖动带状图形式,使用strip_with_median(...);对于带原始点或区间的柱状图,使用bar_with_points(...)。errorbar='ci95'区间是均值的t分布95%置信区间(半宽t_{0.975,n−1}·s/√n),因此在n小时也有效。误差条和原始点叠加是替代方案——同时显示两者通常冗余。组中缺失的类别在其位置上标记(n.d.、—或影线幽灵);空槽位读作零。零值柱状图在基线处显示可见的短柱或点。
6.2 单观测值类别。 使用填充点加一条细的、中性的茎杆连接到语义零(棒棒糖图)。数值标签放在点旁边。
分组绘图辅助函数要求每个提供组中的观测值为非空、一维、有限实数。它们在绘制前拒绝空组和NaN/Inf:显式解决排除情况,报告保留的n,并在适当时单独添加缺失类别标记。它们不会静默删除缺失观测值。排除了观测值的掩码数组在转换前被拒绝;无掩码条目的数组仍有效。请求的SD/CI区间要求每组至少两个观测值;对于单个观测值,使用点而不加区间。标签和数据组必须对齐。对于strip_with_median,非空颜色序列循环;None或空序列使用默认灰色。空柱状图颜色序列使用Matplotlib的默认柱状图颜色;空的focal_palette基础序列使用默认颜色循环。
6.3 连续系列。 均值-每-x作为带标记的线;个体轨迹作为其后透明的细线或点。优先使用文本直接标记在每条线右端,而非图例框;end_of_line_labels(...)放置这些标签。汇总字形(每箱均值/中位数)使用不会被误认为原始观测值的形状,在各系列间相同,在z顺序上绘制于原始点下方。
end_of_line_labels在添加标签前验证系列/标签计数以及非空匹配的x/y长度。端点必须为有限值;内部间隙可保留。它访问每个索引序列的末端,而不复制整个系列。非空颜色序列循环;None或空序列使用当前默认文字颜色。面板字母对于panel_crops必须唯一。
6.4 共享支撑上的分布。 当两个分布高度重叠时,将其堆叠为共享x轴的小面板或使用山脊图。仅在视觉分离清晰时叠加。
6.5 矩阵。 当热图足够小(< ~200个单元格)可读时,在每个单元格中打印值。在颜色条标签中说明一次阈值。
6.6 嵌入。 降维散点图(UMAP、t-SNE、PCA)去除刻度和刻度标签;使用小角落箭头对命名坐标轴。集群通过细引导线连接到周围空白处的文本进行标记。
6.7 配对预测 vs. 观测。 将两者堆叠为具有相同x和颜色的相邻轨道;让对齐承载比较。目标
…
[已截断以进行翻译]