ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

EditaPlot内部设计完整拆解:Python Automation如何驱动本地Origin实例生成可编辑科研图

EditaPlot内部设计完整拆解:Python Automation如何驱动本地Origin实例生成可编辑科研图

【免费下载链接】editaplot

AI-guided editable scientific figures with Codex and local Origin/OriginPro

项目地址:https://gitcode.com/gh_mirrors/ed/editaplot
点击查看免费下载

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 用 LabTalkexpGraph命令导出 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:内置配色目录中的一套色组,供模板稳定复用

七、想读源码?建议这条阅读路线

  1. 入口与命令:editaplot.cmd → SKILL.md → skill/editaplot/references/runtime.md(命令顺序:start → understand → plan → origin-smoke → render → verify);
  2. 数据与语义:data_loader.py → semantic_analysis.py → scientific_workflow.py;
  3. Origin 交互核心:session.py → smoke_test.py → scientific_renderer.py;
  4. 稳健性与可观测:job_queue.py、safe_errors.py、progress_protocol.py;
  5. 回归保障:tests/ 下有数十个针对会话、队列、版本风险与渲染器的测试文件,可对照行为断言读代码。

小结

EditaPlot 的内部设计可以浓缩为一句话:用身份、队列、会话三道闸门控制风险,用 manifest 化模板管理 40 多条绘图路线,用"冒烟测试 + 对象反读"替代"看图报成功"。正是这套 Python Automation 架构,让一份本地 CSV 最终变成一份可编辑、可验证、可追溯的 Origin 科研图。

【免费下载链接】editaplot

AI-guided editable scientific figures with Codex and local Origin/OriginPro

项目地址:https://gitcode.com/gh_mirrors/ed/editaplot
点击查看免费下载

相关推荐

上一篇:MeshCentral会话管理:多用户协作与权限控制的完整方案
下一篇:GitHub_Trending/mu/MusicBot容器健康检查频率:平衡性能与准确性

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进