AIGC标识 当程序员遇到科研绘图——用 Origin 的脚本和批处理能力,把重复劳动自动化

image

为什么程序员应该看一眼 Origin

如果你在实验室或者工程部门工作,大概率遇到过这种场景:导师/领导让你"把这个实验的数据处理一下,画成跟上次一样的图"。然后你打开 Origin,点菜单、调格式、导出——同样的操作重复了十几遍。

很多人把 Origin 当成一个"高级版 Excel 画图工具"来用,点来点去。但 Origin 从第一个版本就内置了完整的脚本引擎和编程接口。对于有编程背景的人来说,用脚本驱动 Origin 的效率是纯手动操作的十倍以上。

这篇文章从程序员视角拆解 Origin 的自动化能力:LabTalk 脚本、Origin C、Python 集成、COM Server 远程调用、以及三种批量处理策略。


一、LabTalk:Origin 的原生脚本语言

LabTalk 是 Origin 内置的脚本语言,语法风格接近 C,但更宽松(不区分大小写、变量不需要声明类型)。你每天在 Origin 的 GUI 上做的每一个操作,底层都对应一条 LabTalk 命令。

1.1 大部分操作都有对应的脚本命令

打开 Origin 自带的 Script Window(Window → Script Window),试试这几行:

// 创建一个新的 workbook,导入 CSV 数据
newbook;
string fname$ = "C:\Data\sample.csv";
impASC fname$;

// 用 A 列做 x,B 列做 y,画线图
plotxy iy:=(1,2) plot:=200;

// 设置 y 轴范围为 0 到 100
layer.y.from = 0;
layer.y.to = 100;

// 导出为 300 DPI 的 TIFF
expGraph type:=tiff filename:="C:\Output\figure1.tiff" tr:=18;

tr:=18 这个参数表示导出分辨率 300 DPI。完整参数表在 Origin 帮助文档的 "Export Graphs" 页面可以查到。

1.2 怎么获取"菜单操作对应的脚本"

不用手写。Origin 有一个很有用的功能:Command Window 的历史记录会保留每次 GUI 操作对应的脚本命令。 执行 Window → Command Window,然后去菜单里做一个操作——比如 Plot → Line → Line——Command Window 里会出现:

plotxy iy:=((1,2),(1,3)) plot:=200 ogl:=1;

把这行复制下来,稍微改改参数,就是一行可复用的脚本。

1.3 遍历所有图形页面并批量导出

这是最实用的脚本场景之一。一个 Project 里有十几张图,手动一张张导出效率太低:

// 遍历所有 Graph 页面,导出为 TIFF
doc -e P {
    if(%H == "Graph") {
        string out$ = "C:\Output\" + %H + ".tiff";
        expGraph type:=tiff filename:=out$ tr:=18;
    }
}

doc -e P 是遍历所有页面,%H 是当前页面的名称。导出文件用页面名称命名,一次性搞定。

1.4 用循环批量处理数据列

假如你的 Workbook 有 50 列 y 数据,第一列是 x,需要对每列做同样的平滑处理:

// 对第 2 到第 50 列分别做 Savitzky-Golay 平滑
loop(ii, 2, 50) {
    smooth iy:=($(ii)) method:=sav method:=6 npts:=15;
}

不需要装任何额外的库,LabTalk 是 Origin 自带的,打开就能用。


二、Origin C:自定义拟合函数和算法

当 Origin 内置的拟合函数不够用时(比如你要拟合一个特定领域的经验公式),Origin C 让你用 C 语言语法写自定义拟合函数。

2.1 自定义拟合函数的最小示例

Code Builder(View → Code Builder)→新建一个 .c 文件:

#include <origin.h>

void _nlsfMyExpFunc(
    double x, double a, double b, double c, double& y)
{
    y = a * exp(-b * x) + c * x * x;
}

然后在 Origin 的 NLFit 对话框里,这个函数会出现在 User Defined 分类下。参数 a、b、c 会自动拟合,不需要额外写梯度计算(Origin C 的拟合引擎会自动处理数值梯度)。

2.2 什么时候需要 Origin C 而不是用 Python

Origin C 跑在 Origin 的进程内,调用 Origin 的内部 API 零开销。如果你需要访问 Origin 的数据结构(Worksheet、Column、Matrix)并在算法中实时读写,Origin C 是最直接的方式。Python 集成虽然方便,但跨进程通信有开销,处理几百万行数据时差异明显。


三、Python 集成——把 Origin 接入你的数据科学生态

Origin 2021 之后内置了 Python 解释器(基于 CPython),可以在 Origin 内部直接运行 Python 脚本,也可以从外部 Python 环境调用 Origin。

3.1 从 Origin 内部用 Python 做数据处理

在 Script Window 里直接用 python 命令:

// Origin LabTalk 中执行 Python 代码
python {
import numpy as np
import originpro as op

# 获取当前 Workbook 的活动 Sheet
wks = op.find_sheet()

# 读取 A 列和 B 列数据
x = np.array(wks.to_list(0))
y = np.array(wks.to_list(1))

# 做 FFT 变换
fft_y = np.abs(np.fft.fft(y))

# 把结果写回新的列
wks.from_list(2, fft_y.tolist(), "FFT")
}

// 然后用 LabTalk 画图
plotxy iy:=(1,3) plot:=200;

这让你可以同时利用 Python 生态(NumPy、SciPy、Pandas)和 Origin 的绘图能力,不用在工具之间导来导去。

3.2 从外部脚本控制 Origin

如果你的數據处理 Pipeline 是 Python 写的,可以在脚本末尾直接调用 Origin 生成图表:

import originpro as op

# 连接到正在运行的 Origin 实例
op.set_show(True)

# 新建 Project,导入数据
wks = op.new_sheet()
wks.from_df(your_pandas_dataframe, 0, 0)

# 画图
graph = op.new_graph()
plot = graph[0].add_plot(wks, 0, 1)

# 设置样式
graph[0].axis('y').from_ = 0
graph[0].axis('y').to = 100
graph[0].label('Python 自动生成的图表')

# 导出
op.exp_graph(graph, 'C:\\output.png', 'png')

这对于需要定期更新的实验报告特别有用——数据跑完,图自动生成,不需要人手动点。


四、批量处理的三种策略

策略 1:Analysis Template(适合固定的分析流程)

适合场景:每个月都要跑同一套表征(XRD、FTIR、TG),流程完全一样。

操作:做完一次完整流程 → Worksheet 右键 → Save as Analysis Template → 以后打开同类数据文件 → Apply Template → 一键自动跑完。

策略 2:LabTalk 循环脚本(适合大量同类操作)

适合场景:50 个数据文件需要各画一张图并导出。

写一个 .ogs 脚本文件(Origin Script 格式),用 LabTalk 的 findFiles 函数列出所有文件,循环导入、绘图、导出。适用于格式完全统一的大批量数据。

策略 3:Python 外部脚本调用 Origin(适合混合数据处理)

适合场景:数据先在 Python 里跑过预处理或机器学习模型,然后需要 Origin 画图输出。

originpro 这个 Python 包,在脚本里串联数据处理和图表生成。适合已经有 Python Pipeline 的团队。

策略 适合场景 编程要求 灵活性
Analysis Template 固定流程、周期性任务 无需编程
LabTalk 脚本 同格式大量文件 基础
Python + originpro 混合数据处理、Pipeline 集成 较高

五、COM Server——从 C# / LabVIEW 调用 Origin

如果你的团队用的是 LabVIEW 做仪器控制,数据采集完成后需要自动生成图表报告,可以走 COM Server 接口:

// C# 调用 Origin
Type originType = Type.GetTypeFromProgID("Origin.ApplicationSI");
dynamic originApp = Activator.CreateInstance(originType);

// 执行 LabTalk 命令
originApp.Execute("newbook;");
originApp.Execute("impASC \"C:\\Data\\experiment.csv\";");
originApp.Execute("plotxy iy:=(1,2) plot:=200;");
originApp.Execute("expGraph type:=tiff filename:=\"C:\\Output\\result.tiff\" tr:=18;");

同样的接口在 VB.NET、MATLAB、LabVIEW 中也有对应调用方式。Origin 的 COM 接口文档在安装目录的 COM Server.chm 帮助文件中。


总结

如果你一直把 Origin 当"画图版 Excel"用,建议花一个下午试试上面任意一种自动化方式。对于程序员来说,学 Origin 的正确姿势不是记菜单快捷键,而是直接看 Command Window 的脚本输出——你会的每一个 GUI 操作,它的底层命令早就摆在那里了。

Origin 客户端可从 originlab.ijinshan.com 获取。安装后在 View 菜单里找到 Command Window,把上面任意一段脚本贴进去跑,几分钟就能体验到脚本驱动比纯手动快多少。

posted @ 2026-07-13 18:22  PC修复电脑医生  阅读(32)  评论(0)    收藏  举报