文章目录
这套经过验证的双面板剂量—反应工作流,从四个剂量水平生成了 300 DPI 的 PNG 和可编辑 SVG。在 4 µM 终点,control 为 90%,treated 为 43%,两者相差 47 个百分点。最终图使用 Matplotlib 3.10.5、Seaborn 0.13.2、明确指定的 DejaVu Sans 字体栈、对色觉缺陷较友好的蓝色与橙红色组合、误差棒、面板标签以及无边框图例。保留的第 8 次尝试在 Linux x86_64 CPU 环境中通过了软件包安装、原生绘图、自然语言聊天执行和产物语义验证。这个结果证明所演示的可复现绘图流程能够工作,但不能据此宣称处理有效,也不能代替统计显著性检验。
科学原理导论
科学可视化为什么属于分析过程
科学图并不是分析结束后添加的装饰。它是数据结构、研究比较和不确定性假设的压缩表达。坐标轴范围、聚合方式、误差棒、颜色、字体、面板顺序和图注都会影响读者看见什么、忽略什么。一个图中的点可能在数值上完全正确,却仍会因为截断坐标轴、分母含糊、配色不可访问、单位缺失或者图注夸大证据而误导读者。因此,“可发表”不仅意味着分辨率足够高,还意味着图形语义、统计解释、视觉层级和证据来源都可以复查。
“图形语法”把图理解为数据变量到视觉属性的映射:变量可以映射到位置、颜色、形状和大小;统计变换可以把原始观察汇总成均值或区间;尺度负责把数值转换成视觉距离;坐标系赋予空间关系以含义。Matplotlib 提供对这些部件的底层控制,Seaborn 则提供统计绘图接口和较合理的默认风格。不过,软件不能替研究者决定科学问题是否恰当。研究者仍然必须说明每一行数据代表什么、为什么比较这些组、误差棒表示什么,以及图形能够支持到什么程度的结论。
本演示故意采用很小且透明的数据:剂量为 0、1、2 和 4 µM;control 均值依次为 100%、96%、93% 和 90%;treated 均值依次为 100%、82%、65% 和 43%;treated 的标准差依次为 3、4、5 和 5 个百分点。这样的结构适合验证绘图流程,因为不用数据库或仪器专用文件也能手工核对所有数值。它不适合做总体推断,因为没有逐重复观察、control 的变异、样本量、随机化方式或实验设计信息。
剂量—反应图和终点差值意味着什么
剂量—反应实验描述施加剂量或浓度与生物、化学或物理响应之间的关系。不同领域会用它研究效力、最大效应、毒性、抑制、激活或校准关系。正式分析常拟合四参数 Logistic 曲线,参数包括上下渐近线、EC50 或 IC50 一类的中点以及斜率。然而,本演示只有四个汇总点,而且没有逐重复不确定性,不能据此给出可信的效力参数。经过验证的工作流只展示观察序列,并报告能够直接从表格审核的终点对比。
在最高剂量 4 µM 处,绝对差值为 90% − 43% = 47 个百分点。“百分点”是两个百分数作绝对相减时的正确单位。如果写成“下降 47%”,读者通常会理解为相对变化,而相对于 90% control 的相对下降约为 52.2%,并不是同一个数。因此,本文保留“47 个百分点”这一可审核表述,不把它改写成疗效结论。此次测试没有计算 p 值、置信区间、模型拟合或因果效应。
横轴的选择同样具有科学含义。剂量往往跨越多个数量级,生产数据经常适合对数坐标;但是普通对数轴无法显示零剂量。本演示采用线性剂量轴,使未处理的零剂量观察可见,并保持输入值之间的实际间隔。如果真实实验跨越 nmol/L 到 µmol/L,经过说明的对数尺度或变换尺度通常更便于判断曲线形状。尺度应由科学范围和比较目标决定,而不应机械套用绘图模板。
误差棒是一项统计声明
误差棒必须说明自己表示的量。标准差描述观察值的离散程度;标准误描述在特定假设下均值估计的不确定性;置信区间来自具有指定覆盖率的区间程序。三者不能互换。本演示将 supplied treated uncertainty 标记为标准差,因为输入就是这样声明的。工作流没有凭空生成 control 误差棒,也没有假装知道样本量。
连接均值的线段只是在有序剂量间引导视线,不证明中间剂量的响应按直线变化。标准差误差棒是否重叠也不是假设检验。严谨的正式工作流应保留重复级数据,在可行时显示单个观察,预先规定排除规则,并使用与实验设计匹配的统计模型。这样,图形才是统计分析的补充,而不是替代品。
字体、视觉层级和本次字体修复
字体直接影响可读性和复现性。脚本如果只请求笼统的 sans-serif,不同操作系统可能解析成不同字体。字体缺失会引起警告、文本度量变化、标签被裁切,或者 PNG 与 SVG 的外观不一致。这个测试序列的早期尝试暴露了该风险:绘图要求没有把字体落实为足够严格的合同,因此后来修订了技能说明和实现,要求明确指定已安装字体。第 8 次尝试在 JSON 摘要中记录活动字体和首选 sans-serif 都是 DejaVu Sans。
DejaVu Sans 随常见 Matplotlib 环境提供,并具有较广的字符覆盖。明确指定它不意味着它适合所有期刊,而意味着此 Linux 结果可以稳定复现。如果期刊要求 Arial、Helvetica、Times 或其他字体,生产环境应安装许可合规的准确字体,检查实际解析到的字体文件,并审阅矢量输出中的文本。关键原则不是相信配置字符串,而是验证最终真正使用的字体。
多面板图需要清晰的视觉层级。面板标签 A 和 B 分别标识终点比较与完整剂量—反应视图。坐标标签说明剂量单位和响应尺度。无边框图例减少不必要的视觉包围,同时保留系列映射。300 DPI 栅格输出适合常见评审和演示场景,SVG 则保留可编辑的矢量几何,适合接受矢量文件的排版系统。
色彩可访问性与冗余编码
最终调色板使用蓝色 #0072B2 表示 control,使用橙红色 #D55E00 表示 treated。这两个颜色来自广泛使用的色觉友好配色思想,在色相和明度上都有较好区分。但颜色本身不是完整的无障碍方案。线型、标记、直接标签、面板结构和足够对比度应提供冗余信息,使灰度打印或存在色觉缺陷的读者仍能理解图形。
该工作流没有使用彩虹色阶,因为这里编码的是两个类别,而不是需要连续多色映射的数值。它也没有把红色和绿色作为唯一差异。更复杂的正式图应使用色觉模拟工具检查,并按照最终印刷尺寸查看。大屏幕上清楚的颜色,缩小到期刊单栏宽度后可能难以区分。
PNG 和 SVG 承担不同任务
PNG 是无损栅格格式,适合网页、演示文稿、电子实验记录和要求固定像素的投稿系统。分辨率取决于像素尺寸与预期显示或印刷尺寸;脱离尺寸谈“300 DPI”并不完整。后期放大小栅格图不能恢复不存在的细节。
SVG 是由路径、形状和文本组成的矢量格式,缩放时不会像素化,也能在矢量软件中编辑,因此适合最终拼版。不过,不同渲染器对 SVG 的处理可能不同,字体嵌入和替换也会改变外观。稳健工作流应同时检查两种导出,保留源数据和脚本,并且不能因为 SVG 可编辑就在图形软件中手工改变科学数值。
语义验证不能只看文件是否存在
绘图命令返回成功还不够。纯白 PNG、没有数据标记的 SVG 或从旧输入生成的图,都可能伴随退出码 0。第 8 次尝试的语义验证器检查 Matplotlib 和 Seaborn 版本、面板描述、输出格式、300 DPI、字体配置、调色板以及 47 个百分点的终点差值,同时要求 CSV、PNG、SVG 和 JSON 摘要都存在且非空。
这种分层验证区分三个命题。第一,绘图软件确实安装并能运行。第二,自然语言请求激活了目标工作流并生成指定文件。第三,保留文件确实描述预期数据和视觉设计。应用截图证明结果报告如何呈现,而产物预览和校验和把呈现内容连接到保留证据。任何单张截图都不被当作底层计算真实发生的唯一证明。
为什么要保留失败历史
一个成熟的科学技能不能只保存成功截图。安装失败可能揭示镜像、Python 版本或平台兼容问题;运行失败可能揭示导入路径或包装脚本缺陷;图形不匹配可能揭示提示要求太弱。测试中发现的问题必须回写到交付的技能说明、安装方法或运行脚本,而不是永远留在临时日志里。只有同一个用户用例在修复后重新通过,才能进入文章生产。
本例的字体问题就是反馈闭环。早期输出没有稳定满足字体描述,于是字体从“风格建议”升级成强制步骤,脚本明确配置 DejaVu Sans,JSON 记录实际选择,验证器拒绝缺失或不匹配的字段。第 8 次尝试才获得文章资格。这样的历史说明“通过”来自问题修复,而不是调整文章措辞掩盖失败。
测试进度
| 验证门 | 第 8 次尝试状态 | 实际证据 |
|---|---|---|
| 技能安装 | 通过 | 打包技能说明加载到隔离代理上下文 |
| 软件包安装 | 通过 | 保留环境中的 Matplotlib 3.10.5、Seaborn 0.13.2 |
| 演示数据 | 就绪 | 四行剂量、control 均值、treated 均值和 treated SD |
| 原生关键功能 | 通过 | 生成双面板 PNG、SVG、CSV 和 JSON |
| 聊天执行 | 通过 | 自然语言请求生成全部规范命名产物 |
| 产物验证 | 通过 | 数值、字体、配色、面板、格式和终点差值均检查 |
| 文章门 | 通过 | 三张具有来源清单的 PNG 图像支持本文 |
演示用户请求
请根据演示数值制作一张可发表的双面板剂量—反应图。面板 A 用误差棒比较 control 与 treated 的终点;面板 B 显示完整剂量—反应系列。使用对色觉缺陷友好的配色,明确采用 DejaVu Sans 字体,加入面板标签和无边框图例,同时导出 300 DPI PNG 与可编辑 SVG。还要把绘图数据保存为 CSV、把摘要保存为 JSON,并以百分点报告终点差值。
这段请求用自然语言说明科学目标和呈现约束,没有要求使用者编写 Python 语句或管理软件包 API。工作流仍具有可审核性,因为生成脚本、输入表、软件版本和输出文件全部保留。
演示数据
演示数据是用于工作流验证的合成数据,由仓库拥有,不来自受版权或隐私限制的数据集。它包含汇总数值而非单个生物重复。剂量单位为 µM,响应和标准差是百分数尺度。来源说明见 data/README.md,实际绘制表见 dose-response.csv。
| 剂量(µM) | Control 均值(%) | Treated 均值(%) | Treated SD(百分点) |
|---|---|---|---|
| 0 | 100 | 100 | 3 |
| 1 | 96 | 82 | 4 |
| 2 | 93 | 65 | 5 |
| 4 | 90 | 43 | 5 |
表格只有四个观察和四列,足以验证排序、绘图、终点算术、标签和导出行为,但不足以估计 IC50、拟合可靠的非线性模型、推断总体效应或区分技术变异与生物变异。这些限制来自演示数据的科学范围,并不是绘图软件缺陷。
经过验证的工作流
工作流先加载可视化说明,然后创建或验证保留的 Python 环境。软件包探针在科学执行前记录版本。原生演示写出确定性 CSV,构建两个面板,明确设置字体和调色板,并从同一个 figure 对象导出 PNG 和 SVG。JSON 摘要记录设计参数和主要终点计算。
随后,同一科学意图通过真实聊天运行时提交。代理检查已安装说明,在受管理环境中编写并执行绘图脚本,在 outputs/ 下生成四个规范产物。技能专用验证器打开结构化文件并检查含义,而不是只接受文件名。早期失败尝试继续保留以便诊断;本文只引用通过的第 8 次尝试。
自然语言目标
→ 检查绘图合同和演示数据模式
→ 验证 Matplotlib/Seaborn 环境
→ 编写并执行绘图脚本
→ 导出 CSV + PNG + SVG + JSON
→ 检查数值、字体、配色、面板和格式
→ 呈现带限制条件的结果报告
用于开发者透明复现的命令如下:
python test/scientific-skills/run_skill_cycle.py scientific-visualization
python test/scientific-skills/skills/scientific-visualization/chat_e2e.py
python test/scientific-skills/validate_how_to.py \
test/scientific-skills/skills/scientific-visualization
这些命令记录测试链路,不要求科学使用者记忆或手工操作。
结果与产物
主要结果是在 4 µM 观察到 47 个百分点的终点差:control 90%,treated 43%。对于给定整数汇总值,这个算术结果是确定的。由于演示数据没有逐重复 control 结果、样本量或协方差信息,所以没有计算差值的推断不确定性。通过状态只适用于图形生成和语义一致性,不适用于疗效判断。

聚焦的应用截图显示终点结果、软件版本、输出格式和科学限制。它不是文件列表、原始 JSON 编辑器、空白画布或输入框截图。

主要产物使用经过验证的字体和配色展示终点比较与完整剂量序列。高分辨率 PNG 是固定栅格交付物;对应的 dose-response.svg 是可编辑矢量交付物。

该数据派生图汇总保留的标量配置字段。权威机器记录是 figure-summary.json,results-report.md 则列出完整输出集合。
失败、修复与反馈闭环
最终成功之前经历了多次失败的聊天尝试。最重要的问题不是通过裁剪截图或改写文章来掩盖,而是生成图没有稳定满足字体合同。通用字体名称在某台机器上可能看起来正常,在另一台机器上却解析成不同字体;当技能说明把字体当作可选美化时,生成代理也可能忽略这一细节。
修复后的工作流在 figure 配置中选择 DejaVu Sans,并在 JSON 中记录解析后的 family。语义验证器如果看不到预期字体就拒绝通过。提示还明确规定 PNG 和 SVG 文件名、300 DPI、面板内容、调色板和终点算术。第 8 次尝试产生与这些说明一致的产物,因此才允许写博客。
这一机制说明测试的价值不只是生成一个“通过”数字。安装问题需要增加替代安装路径;运行问题需要修复包装器或导入逻辑;图形问题需要强化技能提示和验证断言。最终要交付的是能够稳定工作的技能,测试日志只是帮助它改进的临时证据。
如何审核正式发表的科学图
首先按照读者实际看到的物理尺寸检查图形。确认坐标标签和单位仍清晰,线宽缩小后没有消失,标记没有遮挡误差棒,面板标签顺序与图注一致。以灰度和色觉模拟方式查看。把绘制点与源表逐项比较,最好使用自动断言,而不是依赖视觉记忆。
其次检查每个图形元素的统计含义。必须定义误差棒并给出样本量。如果响应被归一化,需要说明分母并保存未归一化数据。如果拟合非线性模型,应报告方程、参数估计、不确定性、拟合算法、约束和拟合诊断。除非类别之间存在科学上的顺序关系,否则不要用线连接类别均值。
最后同时检查栅格和矢量导出。PNG 不应出现裁切、锯齿或不可读文本;SVG 应保留目标字体,也不应含有泄露受限标识符的隐藏图层。记录软件版本和哈希,因为绘图库升级即使不改变源代码,也可能改变布局和渲染。
可复现性
验证标识符为 scientific-visualization/attempt-8,复核日期为 2026-07-26。执行环境是 Linux x86_64 CPU;本功能不需要 CUDA,也没有进行 CUDA 验证。软件版本为 Matplotlib 3.10.5 和 Seaborn 0.13.2。输出集合包含 dose-response.csv、dose-response.png、dose-response.svg 与 figure-summary.json。PNG 以 300 DPI 导出,摘要声明 DejaVu Sans、蓝橙配色、两个面板用途和 47 个百分点终点差。
独立复现时应保存四行输入及其单位,使用记录的软件环境,从同一绘图状态生成两种格式,并重新运行语义验证。升级依赖必须视为新的验证条件,因为字体度量、布局算法、样式默认值和序列化行为可能变化。截图与视觉资产清单用 SHA-256 将出版图像绑定到源产物。
为了提高长期可审核性,还应保存数据许可证、获取日期、转换步骤、随机种子以及最终版图形对应的提交标识。校验和只能证明字节是否改变,不能证明科学设计正确;应用截图只能证明呈现方式,不能单独证明计算过程。因此,该档案同时保留输入、环境、结构化结果、语义断言和呈现证据,让每一种证据只承担它真正能够支持的结论。
局限性
这是科学可视化验证,不是生物学实验。合成数据不能证明效力、安全性、因果性或可推广性。输入只提供 treated 标准差,control 系列和终点差没有不确定性。连接线只是视觉引导,不是拟合模型。四个剂量点不足以给出可靠 IC50;零剂量也使普通对数横轴不能直接使用。
DejaVu Sans 修复只在保留的 Linux 环境中得到验证。其他操作系统、期刊排版系统和 SVG 渲染器可能替换字体或采用不同处理。300 DPI PNG 满足测试要求,但不保证符合某一具体期刊的尺寸、色彩空间、命名或无障碍政策。研究者应根据真实数据和目标期刊调整设计,同时保留语义检查。
此次工作流没有测试超大数据集、交互式 Web 图、三维渲染、GPU 加速、动画或期刊自动投稿。它也没有比较不同统计模型的拟合质量。文章中的 47 个百分点只来自演示表,引用时必须同时带上剂量、两组终点数值以及没有推断不确定性的限制。
参考文献
- Hunter, J. D. “Matplotlib: A 2D Graphics Environment.” Computing in Science & Engineering 9(3), 90–95 (2007)。DOI: 10.1109/MCSE.2007.55
- Waskom, M. L. “Seaborn: statistical data visualization.” Journal of Open Source Software 6(60), 3021 (2021)。DOI: 10.21105/joss.03021
- Wilkinson, L. The Grammar of Graphics, 2nd edition. Springer (2005)。DOI: 10.1007/0-387-28695-0
- Weissgerber, T. L. 等。“Beyond Bar and Line Graphs: Time for a New Data Presentation Paradigm.” PLOS Biology 13(4), e1002128 (2015)。DOI: 10.1371/journal.pbio.1002128
- Crameri, F., Shephard, G. E., and Heron, P. J. “The misuse of colour in science communication.” Nature Communications 11, 5444 (2020)。DOI: 10.1038/s41467-020-19160-7
- Matplotlib 项目:字体官方文档与 savefig API。
无需编程即可尝试此工作流
MindPlot 已内置所演示的 scientific-visualization 科学技能。使用者可以用普通语言描述图形目标、数据、单位、无障碍要求和导出格式;MindPlot agent 会依据已安装技能编写并运行绘图代码,保存交付物,并呈现经过验证的结果供审核。使用者不需要亲自编写上面的复现命令。可以访问 https://mindplot.ai 在线体验,或者下载桌面版,以获得更完整的使用体验和更强的本地数据隐私保护。