--- name: cell-visualization-code description: >- 生成、重构或审核科研可视化代码,支持 Python 的 Matplotlib/Seaborn 与 MATLAB。 适用于用户要求按论文或报告规范编写绘图代码、统一多图样式、改造已有绘图脚本、 适配 IEEE Transactions 或 Elsevier 等出版版式、校准最终物理尺寸、矢量导出或 检查代码可复现性。保留数据、统计和科学含义, 不用于从参考论文反向复现数据图、机制示意图、图片编辑或图像描摹。 metadata: compatibility: >- 需要读取数据和代码、执行所选后端并查看实际输出的宿主。Python 路径通常需要 Matplotlib;MATLAB 路径需要可用的 MATLAB。配置检查脚本仅依赖 Python 3.10+ 标准库。 version: "1.1.0" language: "zh-CN" --- # 科研可视化代码规范 把绘图代码做成可复现的科研产物,而不是一次性调图脚本。最终判断基于真实数据、实际运行结果和目标版面中的可读性。 ## 路由与边界 先确定任务是新建代码、重构已有代码还是审核代码,并保留用户指定的后端。 - Python/Matplotlib/Seaborn:读取 [Python 规范](references/python-matplotlib.md)。 - MATLAB:读取 [MATLAB 规范](references/matlab.md)。 - 两条路径都读取 [共享代码合同](references/shared-contract.md);选择字号和尺寸时读取 [版式策略与示例 profile](references/style-profiles.md);准备交付时读取 [输出与验收](references/output-qa.md)。 - 目标为 IEEE Transactions 或 Elsevier 时,另读 [出版商 Profile](references/publisher-profiles.md),并以具体期刊 Guide for Authors 覆盖通用值。 - 需要将参考论文图先用参考数据复现、通过门槛后再换用户数据时,改用 `cell-data-figure`。 - 需要生成机制图、图形摘要或概念示意图时,不使用本 Skill。 - 只处理 LaTeX 全文分页、浮动体和投稿材料时,改用 `cell-submission`。 用户只要求审核时不直接改文件;用户要求生成或修改时才写入代码。已有代码能局部修复就不整体换语言、换库或重写分析流程。 ## 不可破坏的事实 1. 不改变观测值、分组、样本身份、单位、时间顺序、统计口径和缺失规则来改善外观。 2. 不从图片重建虚假原始点,不用随机数替代缺失实验数据,不复制参考图的 P 值、误差条或效应量。 3. 图中 n、误差、区间、显著性和比较对象必须能回到真实输入或已核验计算;设计信息不足时只做有边界的描述性图。 4. 用户提供的已有计算结果默认只可视化;除非任务要求,不在绘图脚本中重新训练模型、重新拟合主分析或隐式改变筛选。 5. 颜色不能成为唯一信息通道;同时使用线型、标记、标签、位置或面板结构。语义相同的对象在同一项目中保持相同编码。 6. 哈希、文件存在、静态配置通过不能证明图正确;必须实际运行并查看输出。 ## 工作流程 ### 1. 锁定输入和用途 读取真实数据、已有代码、目标图和期刊/报告要求。明确每行数据代表什么、独立单位、配对或重复测量、单位、变换、缺失与筛选规则。确定最终使用场景、单栏/双栏/自定义宽度、需要的格式和是否要求可编辑源文件。 未知期刊尺寸时不要伪造官方要求;使用可说明的项目 profile,并把数字标为项目选择。IEEE `8.89 cm` 等值只在已确认对应模板时使用。 ### 2. 建立任务 profile 从 [示例 profile](assets/profile.example.json) 复制到任务工作区并替换为实际值。它记录后端、源画布、文档显示宽度、字体层级、线宽、语义颜色、输入和输出,不记录科研结论。`native_final_size` 的源宽等于显示宽;`scaled_source` 必须在导出后测量实际 PDF 边界并复核缩放后的可见字号,不能把两种策略的数值混用。 ```bash python scripts/check_profile.py path/to/profile.json ``` 检查通过只表示 profile 完整且路径安全。已有项目若使用同等配置对象,不要求为迁就本 Skill 重写格式,但必须保留相同信息。 ### 3. 编写或重构代码 代码至少分离:输入读取、输入验证、必要计算、绘图、导出和入口。样式常量集中管理,单图代码只定义科学内容与必要布局。使用相对路径、命令行参数或显式配置,不写开发者机器的绝对路径。 随机抖动、抽样或布局算法显式保存种子;无随机过程不为形式添加种子。禁止静默捕获异常后继续输出“成功”图。 可从 [Python 模板](assets/python_plot_template.py) 或 [MATLAB 模板](assets/matlab_plot_template.m) 开始,但必须根据真实字段、设计和目标图修改;模板示例不是用户数据或完成证据。 ### 4. 在最终物理尺寸下设计 先确定最终宽高,再设置字体、线宽、标记、图例和子图间距。不要先制作巨大画布再整体缩小,也不要用缩小字体解决布局冲突。单栏和双栏应是独立 profile;复杂多面板从一栏改两栏时重新组织面板,而非简单把宽度乘二。 图例不遮挡数据、科学计数法、误差条或关键区间。自动位置可以作为初值,正式交付前必须实际检查;人工拖动后的坐标要回写代码。 ### 5. 实际运行和双层验收 在干净工作目录用交付代码和必要输入实际重跑。先检查图本身,再检查它插入最终论文/报告后的页面。源图在 100% 缩放下好看,不代表缩放到栏宽后可读。 若 `bbox_inches="tight"`、外置色条或轴外文字改变 PDF 页面边界,以导出后的实际尺寸为准。检查字体替换、文字是否仍为文字、线条/图元是否保持矢量,以及栅格层是否具有足够分辨率。 ### 6. 交付 交付实际可运行的代码、最少必要输入或输入合同、任务 profile,以及用户或目标期刊要求的图件。MATLAB 在用户需要继续手调时可交 `.fig`;Python 不制造虚假的可编辑工程格式。 内部保留运行命令、软件版本、输入与输出哈希和实际查看记录;不把缓存、测试图、旧版脚本和未采用 profile 混入最终目录。未实际运行所选后端时,只能交待运行代码并明确未完成运行验收。 ## 完成条件 - 代码从声明的输入重新生成全部声明输出,不依赖开发者绝对路径或未交付的隐藏文件。 - 数据映射、单位、统计标注、样本量和图注含义一致。 - 最终物理尺寸、字体层级、线宽、面板、图例和颜色编码已经实际查看。 - 矢量与栅格格式符合当前任务要求;扩展名与真实格式一致。 - 同一项目的图使用同一个已确认 profile,确需例外时在代码中说明具体原因。 - 插入目标文档后重新编译或渲染并检查;未完成这一项时不宣称出版版面验收通过。