Origin 绘制反应能量图
前言
反应能量图(reaction energy diagram)是 DFT 计算中展现化学反应的重要方式,OriginLab 官方也提供了很有意思的方案来绘制这样的路径图。本文将以下图中的一条路径为例,对官方提供的方案进行详细解释和扩展。

绘图思路
使用 Origin 绘制大部分图像都需要明确以下两点:
- 数据点的表现形式
- 数据点之间的连接方式
本图与最常见的“Line”图十分相近,但实际数据却区别于“Line”图需要的数据。“Line”图是将一个个数据点连接成线,但本例中每一个中间产物只对应一个能量。也就是说,数据是不具有“平台”这个概念的,而图中却要将其表现出“平台”的样式。
由此思路,我们得到了第一种绘图方法:人为地扩展数据点的横坐标。假设原数据为 (A, 1.5)
,那么在绘图时,手动增加 (A-1, 1.5)
、(A+1, 1.5)
两个点,即可得到“平台”的效果。
然而,当反应的中间路径较多时,人为增加数据点是十分困难的。由此,官方提供了一个非常巧妙的方法,即 Floating Column。Floating Column 本是柱状图的一种,数据至少分为三列:X、Y 下界、Y 上界。
对于本例来说,柱状图自身可进行数据间的连接,且连接线样式可独立调整,这则是利用柱状图绘制的优势。由此,我们可以假设,当上界与下界数据相同时,柱状图的高度为零,而其本身的宽度即可作为我们的“平台”。
数据准备
初始数据
一般的,初始数据如下图所示,X 列为路径编号,每个 Y 列的 Long Name
为反应路径名,数值为反应能,从左至右为反应路径顺序。
数据转置
由于柱状图每一行为一个数据点,为了满足柱状图的数据要求,需要将数据转置,转置后,从上至下为反应路径顺序。

生成制图数据
在 Origin 官方教程中,使用了 Labtalk 脚本进行数据操作,此脚本是为了生成两列相同的数据分别作为 Floating Column 的上界和下界,文末将详细说明。
1 | newsheet; |
最后,新增 X 列作为路径编号,并将列类型设置为 XYY
。
图像绘制
第一条路径
本绘图方法中,每一条路径都需要独立绘制,每次选择一组数据。
选中 B、C 列,选择 Plot -> Bar -> Floating Columns
制图,但此时图中是没有图像的,这是由于当柱状图高度为零时,Origin 默认不显示。我们可以通过 Labtalk 命令 page.BarShowZero = 1
或者勾选 Preference -> Options -> Bar graph show Zero Value
令其显示。
数据连接
利用数据连接功能,我们可以将每个柱子连接起来,并自定义线形。
增加多条路径
如果需要绘制的路径不止一条,可以利用 Origin 的 Add Data to Layer 功能,将其他组数据拖入图像中。
数据标注
这里介绍一个简便方法标注各个中间路径的名称,如图所示,增加 B 列(名称列)和 C、D 列(全为零),将 C、D 列数据添加至图中,并将该组路径的颜色设置为无色,显示其 Label,即可创建在同一水平线且与真实数据垂直对齐的名称。
Labtalk 详解
Range
1 | range rsrc = 1!; |
类似于 range a = 1!
是指当前活动工作簿的第一个工作表。本组命令是将数据来源设置为第一个工作表,将目标数据存放在第二个工作表。
参考文档:Range-Notation
New Column
1 | rdst.ncols = rsrc.ncols*2; |
上面我们说过,该 Labtalk 脚本是为了将一列数据复制成两列作为 Floating Column 的下界和上界,ncol
代表的是 new column
。本组命令是将 rdst
的列数设置为 rsrc
的两倍。
Loop
Header
1 | for (int ii = 0; ii < rsrc.ncols; ii++){} |
控制本次循环在遍历完源工作表的所有列后结束。
Body
1 | range r1 = 1!$(ii+1); |
此处 irng
为 input range
,orng
为 output range
。
当 ii = 0
,则 r1
为源工作表的第 1 列, r2
为目标工作表的第 1 列, r3
为目标工作表的第 2 列。接着将源工作表的第 1 列追加到目标工作表的第 1、2 列。
当 ii = 1
,则 r1
为源数据工作表的第 2 列, r2
为目标数据工作表的第 3 列, r3
为目标数据工作表的第 4 列。接着将源工作表的第 2 列追加到目标工作表的第 3、4 列。
由此可见,随着循环的进行,源工作表的每一列都被拷贝成了两列。
Tips
在执行本 Labtalk 命令时,当前活动工作簿的第二个工作表会被覆盖,请确保第二个工作表内为空或没有有效数据。
环境
- Windows 11 (22000.652);
- Origin 2022b (Academic).
备注
- 本文禁止转载;
- 随着版本更新,您所使用的功能可能与教程中有所不同。