【免费下载链接】editaplot
AI-guided editable scientific figures with Codex and local Origin/OriginPro
EditaPlot 是一个 AI 驱动的可编辑科研绘图工作流:它用 Python Automation 在 Windows 本地自动启动专用 Origin 实例,把 CSV/TXT/XLS/XLSX 数据画成真正可编辑的 OPJU 项目,并同步导出 PNG、PDF、TIF。这篇文章面向想理解其内部机制的新手,拆解 EditaPlot 如何用 originpro 接口、冒烟测试和反读验证,把"命令行一句话"变成"可交付的科研图"。
一、为什么必须"驱动"Origin,而不是自己画
普通 Python 绘图库(如 matplotlib)只能输出静态图片;而科研投稿经常需要可编辑的源文件。EditaPlot 的设计选择很明确:Python 不亲自画点线,而是作为"操作员",通过 COM Automation 调用你电脑里已安装的 Origin/OriginPro,让 Origin 本体完成绘图、排版和导出。
图 1:由真实 Origin 实例渲染、可继续编辑的分组柱状图(含 SD 误差棒)
这带来三层收益:
- 产物可编辑:拿到的是
result.opju原生项目,双击打开即可改图例、移动坐标轴; - 样式受控:所有颜色、字号、线宽来自固定的风格契约,而不是随机默认值;
- 结果可验证:画完不是只看图片,而是反读 Origin 对象逐项核对。
二、内部结构五层拆解
EditaPlot 的源码主要位于 runtime/src/origin_sciplot/,配合 runtime/templates/ 与 skill/editaplot/,可以概括为五层:
| 层 | 位置 | 职责 |
|---|---|---|
| 启动器 | editaplot.cmd | 自动挑选兼容的 64 位 Python 3.10–3.12,创建项目隔离环境 |
| 绘图引擎 | runtime/src/origin_sciplot/ | 读表、列语义分析、轴规划、模板分发 |
| 模板层 | runtime/templates/ | 42 个模板目录,覆盖 40 条公开绘图路线 |
| Automation 后端 | origin_backend/ | Origin 会话生命周期、队列、导出、反读 |
| Skill 层 | skill/editaplot/ | 供 Codex 调用的 SKILL.md 与脚本,负责对话与确认 |
每个模板都是一个"自描述小包":以 runtime/templates/bar/ 为例,manifest.yaml声明必需列与产出物,runner.py只有几行,最终都汇入统一的 scientific_renderer.py。这种"manifest 驱动"的结构让新增一种图只需新增一个目录。
三、握手三步:安全启动专用 Origin 实例
启动 Origin 是整套系统里风险最高的环节,origin_backend/ 用三道闸门控制它。
1. 身份闸门(execution_context.py)
execution_context.py 直接读取当前进程的 Windows 安全令牌(而非环境变量),判断运行者是否真的是交互用户。若检测到 Codex 沙箱账户,会在调用 COM 之前停止,要求对精确命令发起授权申请;身份无法确认时则直接失败——宁可不做,也不乱碰你的 Origin 窗口。
2. 队列闸门(job_queue.py)
job_queue.py 用 Windows 命名互斥量保证同一登录会话内一次只有一个自动化任务操作 Origin。它是操作系统持有的锁,进程崩溃后自动释放;等待方每 30 秒报告一次origin_job_queue事件,等待 30 分钟上限只约束等待者,绝不强杀正在绘图的任务。
3. 会话闸门(session.py)
session.py 中的OriginSession走外部originpro模式:
- 调用
OriginExt.Application()创建一个EditaPlot 独占的新实例(不接管你已打开的窗口); set_show(False)静默启动,随后用 LabTalk 轮询run.isOCready()等待初始化完成;- 读取真实版本号并做版本握手,只有 EditaPlot 自有实例才允许执行
op.new(asksave=False)清空项目; - 半启动失败时会清理残留实例,并只对外暴露脱敏的错误代码与阶段。
四、origin-smoke:绘图前的"最小闭环"冒烟测试
正式 render 前,EditaPlot 要求先跑origin-smoke(见 smoke_test.py)。它会真实启动一次专用实例,按 11 个阶段走完最小闭环:
activate → read_version → read_program_path → ready → create_book → create_graph → style_graph → save_project → export → readback → cleanup
也就是说,冒烟测试本身就是一次"微型绘图":建工作簿、建图、套样式、存项目、导出图片、反读、清理。同时 template_capabilities.py 会把当前机器上每个模板标为verified、compatible_unverified或blocked三态之一——连接成功不等于每条模板都能画,这个能力报告是 render 是否放行的一票。
五、render 流水线:从 CSV 到 OPJU 的全程留痕
计划确认后,正式命令是render render-plan.json,由 run_template_worker.py 在独立子进程中执行,并按 progress_protocol.py 逐行输出 JSON 进度。每一步都带有单调时钟计时的elapsed_seconds,方便定位卡在哪:
| 进度步骤 | 对应环节 |
|---|---|
load_template | 读取模板 manifest |
create_output_dir | 在源文件旁新建时间戳交付目录 |
validate_csv | 按 schema 校验列与取值 |
analyze_data | 列角色推断、数值审计、轴规划 |
origin_job_queue | 等待 Origin 会话槽位 |
launch_origin_draw_export_verify | 启动实例、构图、导出、反读 |
verify_outputs | 检查 OPJU/PNG/PDF/TIF 完整性 |
几个值得注意的工程细节:
- 源文件只读:data_loader.py 读取表格的同时计算 SHA-256 指纹,全程不写回原始 CSV;
- 语义冻结:semantic_contract.py 把"哪列画、哪列只辅助、哪些计算不做"固化成带哈希的确认书,源文件或映射一变,确认即失效;
- 产物落位:output_manager.py 在源数据同目录原子创建
<数据名>_EditaPlot_时间戳文件夹,集中存放 render-plan、OPJU、图片与验证报告,绝不覆盖旧结果; - PDF 必须嵌字体:export_utils.py 用 LabTalk
expGraph命令导出 PDF 后,还会字节级检查/FontFile,确认字体真的嵌入了; - 反读而非目测:verify_utils.py 通过两条互相独立的 LabTalk 路径读取图层几何做交叉核对,页面尺寸容差只有 0.03 cm,字号、线宽、颜色逐一致,缺一即判失败。
图 2:高密度矩阵场景下,EditaPlot 会自适应布局(稀疏刻度、分离 colorbar)并通过反读门禁
六、为什么产物"仍然可编辑"
EditaPlot 坚持"Python 预览图不冒充 Origin 成图":预览走 scientific_preview.py,正式图必须由真实 Origin 渲染。成图流程中:
- 原始数据与必要的辅助列进入 Origin 工作簿,而不是被"烤"进位图;
- 样式来自 base_style_contract.py 的固定风格契约与 palette_catalog.py 的中文科研配色目录,重画时保持一致;
- 保存用
op.save()落盘result.opju,图例可在 OPJU 中手动移动; - 对 XPS 等专业模板,参考图只贡献"图形语法与安全风格",绝不改写列用途、峰组分或结合能轴方向。
图 3:XPS 拟合分解图示例——原始谱、包络与分峰均在 OPJU 中可编辑
图 4:内置配色目录中的一套色组,供模板稳定复用
七、想读源码?建议这条阅读路线
- 入口与命令:editaplot.cmd → SKILL.md → skill/editaplot/references/runtime.md(命令顺序:
start → understand → plan → origin-smoke → render → verify); - 数据与语义:data_loader.py → semantic_analysis.py → scientific_workflow.py;
- Origin 交互核心:session.py → smoke_test.py → scientific_renderer.py;
- 稳健性与可观测:job_queue.py、safe_errors.py、progress_protocol.py;
- 回归保障:tests/ 下有数十个针对会话、队列、版本风险与渲染器的测试文件,可对照行为断言读代码。
小结
EditaPlot 的内部设计可以浓缩为一句话:用身份、队列、会话三道闸门控制风险,用 manifest 化模板管理 40 多条绘图路线,用"冒烟测试 + 对象反读"替代"看图报成功"。正是这套 Python Automation 架构,让一份本地 CSV 最终变成一份可编辑、可验证、可追溯的 Origin 科研图。
【免费下载链接】editaplot
AI-guided editable scientific figures with Codex and local Origin/OriginPro
相关推荐
一眼看懂EditaPlot:把CSV变成可编辑Origin图的AI科研绘图工具全景解析
一眼看懂EditaPlot:把CSV变成可编辑Origin图的AI科研绘图工具全景解析 EditaPlot 是一款面向 Windows 的开源 AI 科研绘图工
AI绘图如何不越权?EditaPlot Codex沙箱识别与Origin任务队列安全设计全解
AI绘图如何不越权?EditaPlot Codex沙箱识别与Origin任务队列安全设计全解 做 AI 绘图时,新手最容易担心一件事:把实验数据交给 AI 之后
Paper2Poster:AI驱动的科研海报生成完整指南
Paper2Poster:AI驱动的科研海报生成完整指南 Paper2Poster是一个创新的开源项目,通过多代理系统将科学论文自动转化为专业的多模态海报。无论
人工智能大模型AI Agent多智能体AI 评测媒体生成
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考