# Codex Origin Plot

> ---

- Skill: `guoleizhen717/codex-origin-plot` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add guoleizhen717/codex-origin-plot`
- Raw SKILL.md: https://api.skillmd.com/api/skills/guoleizhen717/codex-origin-plot/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: guoleizhen717 (https://skillmd.com/u/guoleizhen717)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/guoleizhen717/codex-origin-plot

---

﻿---
name: codex-origin-plot
description: >-
  Drive OriginLab Origin via COM automation to create publication-grade
  scientific figures. Handles combined-tool cutting force analysis
  (force, specific energy, synergistic coefficient) with grouped column
  and line+symbol charts. Supports Chinese + English labels. Designed
  for mechanical engineering / mining engineering research papers.
  When the user needs Origin figures (not matplotlib) for journal
  submission, or when the user says "画一张Origin图", "用Origin画",
  "Origin绘图", "COM自动化Origin", trigger this skill.
---

# codex-origin-plot — Codex驱动Origin科研绘图

> 直接通过 COM 自动化控制 OriginLab Origin，从数据到出版级图表一步完成。

## 概述

本技能解决的核心问题：**在 Codex 中调用 Origin COM 接口，自动创建、格式化、导出科研图表**。

与 matplotlib/seaborn 不同，Origin 是许多工程学科（机械、矿业、材料）的**标准投稿工具**。审稿人和导师往往要求 `.opju` 源文件 + Origin 原生图表。本技能让你在 Codex 对话中直接操控 Origin，无需手动点击。

**定位**：本技能专注于 **Origin COM 自动化执行**，不做数据剖析和图表类型推荐（这些由 scipilot-figure-skill 负责）。如果你不确定该画什么图，先走 scipilot-figure-skill 的流程。

## 何时使用

- 用户说"用Origin画图"、"Origin绘图"、"COM自动化Origin"
- 用户需要 `.opju` 源文件 + Origin 原生导出 PNG/PDF
- 用户在做组合刀具切削力分析（切刀/先行刀合力、比能、协同系数）
- 用户需要中文/英文双语标签的出版级图表
- 用户指定目标期刊需要 Origin 格式（而非 matplotlib）
- 用户已有数据，需要快速生成 Origin 图表预览

## 核心工作流（6 步）

```
0. 环境检查    —— 确认 Origin 安装路径、Python 环境、pywin32
   ↓
1. 准备数据    —— 从 CSV 或计算结果中整理数据
   ↓
2. 启动 Origin  —— kill 残留进程 → COM Dispatch → Visible
   ↓
3. 创建图表    —— Workbook → 填数 → plotxy（逐个创建，逐个格式化）
   ↓
4. 格式化      —— 坐标轴标签/范围/标题，字体大小
   ↓
5. 导出        —— expGraph PNG（逐个导出；合并图用 merge_graph）
   ↓
6. 展示给用户  —— 用 view_image 展示 PNG，等待反馈
```

## 关键经验（避免踩坑）

### 稳定可用的
- `newproject`, `win -t wks`, 填数据 ✅
- `plotxy` 创建图表 ✅
- 设置坐标轴标签/范围/标题 ✅
- 逐个图表创建 + 逐个导出 ✅

### 会崩溃/静默失败的
- `save -i` 保存项目 → **COM 崩溃** `(-2147417851)` ❌
- `expGraph` → 返回 True 但**不生成文件** ❌（需多重回退方案）
- `merge_graph` → 可能返回 False ❌（用独立导出代替）
- `echo %H` → 始终返回 False ❌（COM 无法捕获 LabTalk 输出）

### 导出回退策略
1. 优先：`expGraph type:=png filename:="D:/path/fig.png" width:=2400 height:=3600 tr1.unit:=2`
2. 回退：`page.export(type:=png, filename:=D:/path/fig.png)`
3. 回退：不带引号的 expGraph
4. 兜底：截图 Origin 窗口

## 依赖

```
pywin32>=305       # COM automation (pip install pywin32)
OriginLab Origin   # 2021/2022/2023 tested
Python 3.9+
```

Origin 安装路径检测（按优先级）：
1. `D:\Program Files\OriginLab\Origin2022\Origin64.exe`
2. `C:\Program Files\OriginLab\Origin2022\Origin64.exe`
3. 全盘搜索 `Origin64.exe`

## 参考文件

| 文件 | 用途 |
|------|------|
| `references/origin_com_ref.md` | COM 自动化坑点大全 — 新建会话前必读 |
| `references/recipe_forces.md` | 组合刀具切削力图谱 — 柱状图/折线图/多面板配方 |
| `scripts/origin_plot.py` | 可独立运行的 Python 脚本 — 一键生成三面板图 |

每份文件开头都有目录，先查目录定位，再读对应小节。

## 常见任务示例

### 任务 A：用户给了一组贯入度数据，要画三面板图

**流程**：
1. 读 `references/recipe_forces.md` 确认图表配方
2. 读 `references/origin_com_ref.md` 确认 COM 要点
3. 运行 `scripts/origin_plot.py` 或手动执行 COM 命令
4. 导出 3 张 PNG → `view_image` 展示给用户
5. 根据用户反馈迭代（调坐标轴、字体、颜色）

### 任务 B：用户已有 CSV 原始数据（未计算合力/比能/协同系数）

**流程**：
1. 先读取 CSV，按第三章方法计算：
   - 合力 = sqrt(Fx² + Fy² + Fz²)，取稳态阶段均值
   - 切削比能 = 总合力 / 贯入度（或按用户公式）
   - 协同切削系数 K = 切刀合力 / 先行刀合力
2. 将计算结果整理成 Python dict
3. 然后走任务 A 的流程

### 任务 C：用户要求多面板合并图

**流程**：
1. 先逐个创建 3 张独立图表（按 Recipe 1-3）
2. 尝试 `merge_graph option:=2 row:=3 col:=1 keepsize:=0`
3. 如果 merge_graph 返回 False → 导出 3 张独立 PNG，告知用户手动合并
4. 如果 merge_graph 成功 → 导出合并后的 MGraph1 为单张长图

## 图表类型映射

| 分析指标 | Origin plot type | template | iy 参数 |
|----------|-----------------|----------|---------|
| 合力对比 | Grouped Column (202) | Column | (1,2) |
| 切削比能 | Line + Symbol (201) | LineSymb | (1,3) |
| 协同系数 | Line + Symbol (201) | LineSymb | (1,4) |

## Python 环境说明

Codex 的 Python 运行时路径：
```
C:\Users\admin\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe
```

如果 pywin32 未安装：
```powershell
& "C:\Users\admin\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe" -m pip install pywin32
```

## COM 会话模板

```python
import win32com.client, time, pythoncom
pythoncom.CoInitialize()
origin = win32com.client.Dispatch("Origin.Application")
origin.Visible = True
time.sleep(3)
# ... send LabTalk commands via origin.Execute(cmd) ...
pythoncom.CoUninitialize()
```

每个 COM 会话必须配对 `CoInitialize/CoUninitialize`，否则资源泄漏。

## 注意事项

- 在开始前必须 `taskkill /f /im Origin64.exe`，避免残留进程干扰
- 不要尝试通过 COM 保存 `.opju` 项目文件（会崩溃），告知用户手动保存
- 每个图表创建后立即格式化和导出，不要在多个图表间跳转
- COM 返回值 `True/False` 不代表操作是否完成，需要检查实际文件是否生成
- 如果 `expGraph` 三次回退都失败，截图 Origin 窗口作为兜底方案

