三组数据摆在面前,X 轴完全一致,Y 轴的量级差了三个数量级,一个是 0.001 级的微弱信号,一个是 10^4 级的计数值。把它们画进同一个图层,小的那条线就贴在地平线上变成一根直尺。很多人第一反应是把数据乘个系数"放大一下",画完再在心里记住"这条线其实要除以 10000"——这种图自己看还行,一旦交给别人或者放进报告里,基本等于埋雷。用 Origin 做多图层绘制方法,解决的正是这类问题:让几套量纲不同、坐标范围不同、甚至横轴都不同的数据,共享同一个图形窗口,各自拥有独立的坐标系,还能被整整齐齐地排版成一张可以直接用在论文里的图。
这篇东西写给谁看?写给已经会用 Origin 画基本折线图、柱状图,但一到"双 Y 轴""多面板""图层对齐"就开始靠鼠标硬拖的人。下面讲的是我在处理光谱、电化学和统计类数据时反复用过的一套流程,重点不在"点哪个按钮",而在于每一步为什么要这么做、不这么做会出什么问题。
1. 一张图装不下三组数据:多图层到底在解决什么问题
1.1 单图层硬塞数据的三种典型失败
第一种失败是量纲碾压。一个图层只有一套坐标轴刻度,Y 轴范围被大数值数据撑到 10^4 之后,小信号数据的视觉分辨率就彻底没了。有人用工整的系数把数据缩放后画上去,图的形状对了,但读图的人无法从轴上直接读数,等于把换算工作转嫁给了读者,这在正式报告里是不合格的。
第二种失败是横轴不共享。有些数据虽然画在同一张图里,但横轴其实分属两类——比如一条是波长(nm),一条是波数(cm⁻¹)。它们之间是倒数关系,非线性,硬塞进一根轴必然有一个是错的。这种情况只能用独立图层,靠图层之间的位置关系来表达"这条轴在下方、那条轴在上方"。
第三种失败是图形类型冲突。柱状图和折线图叠在一起做对比是常见需求,但在一个图层里,柱子的 X 位置和折线点的 X 位置会互相干扰,尤其是柱状图开了组内偏移之后,折线的落点会莫名其妙地偏。把柱子和折线放到两个图层、共享同一根 X 轴,这个问题从根上就不存在了。
1.2 多图层的本质:一个 Graph 窗口里装多套独立坐标系
Origin 里的图层(Layer)不是 Photoshop 那种"透明画布叠加"的概念,它是一整套完整的坐标系:有自己独立的 X/Y 轴、自己的刻度、自己的坐标范围、自己的绘图区边框、自己的图例条目池。一个 Graph 窗口里放几个图层,就有几套这样的坐标系,它们共用同一个页面(Page),页面有物理尺寸,单位是厘米。
理解这一点非常关键,因为后面所有的"对齐""联动""比例"问题,本质上都是在处理两组参数之间的关系:一套是逻辑参数(坐标轴从多少到多少),一套是物理参数(这个绘图区在页面上占几厘米、位置在哪儿)。很多人的图看起来别扭,就是因为只调了逻辑参数,没管物理参数。
举一个具体的例子。图层 A 的 Y 轴是 0 到 100,图层 B 的 Y 轴是 0 到 1。如果两个图层在页面上的高度都是 6 厘米,那么 A 图层的刻度密度是每厘米约 16.7 个单位,B 图层是每厘米 0.167 个单位。视觉上两条曲线的斜率看起来差不多,但实际上一个是"陡峭",一个是"平缓",图给人的直觉是错的。想让它们可比,就必须让两个图层的单位密度一致,这就是后面要讲的 Units per cm 的意义。
1.3 什么时候不该用多图层
多图层不是万能药。如果两组数据的量纲本来就可以用同一套轴表达(比如两条都是同一个指标的重复测量),那硬拆成两个图层只会让图例变复杂、让读者多花时间理解轴的关系。另一种不适合的情况是"为了好看而堆图层"——有人把一个简单折线图拆成背景层、网格层、数据层、标注层四个图层,看起来很专业,实际上每次改数据都要重新对齐一遍,维护成本极高。
我的判断标准很粗暴:如果这组数据换一根轴之后,读者读图的顺序不会变得更顺畅,那就不该拆。拆图层的唯一理由,是让图形表达的信息更清楚,不是为了展示操作技巧。
2. 先把工具箱认清:Origin 里能用到的图层类型和它们的边界
2.1 2D Cartesian 图层和它的几个变体
最常用的是二维直角坐标图层。用 Plot Setup 新建图层时,默认就是这么一套。它的变体主要是在坐标轴的数量和位置上做文章:可以在下方加一根 Top X 轴、右侧加一根 Right Y 轴,形成"四边都有轴"的图。这种图在多参数对比里很常见,比如下面 X 是时间、上面 X 是温度,左右 Y 分别是两个不同的响应量。
需要注意的是,加出来的 Top X 和 Right Y 默认是"跟随"关系,它们并不自动拥有独立的数据。要让它们显示不同的物理量,得手动去设 Scale 和 Tick Labels,或者在图层里挂上对应的数据集。我见过不少人加完轴之后发现上面那根刻度是空的或者和大轴完全一样,原因就在这里。
2.2 Double-Y 与 Multiple-Y:两条以上纵轴的官方解法
如果只是要两条纵轴,用 Double-Y 图层最省事:Plot Setup 里选 Double-Y 类型,左边一组数据、右边一组数据,Origin 会自动生成两层结构并且共享 X 轴。它的好处是 X 轴的联动是内置的,你改一层,另一层跟着动。
三条以上纵轴就要用 Multiple-Y 了。新版本里可以在同一个图层上挂多条 Y 轴,逐条设置颜色、刻度和标题。这类图在实际汇报里很有冲击力,但风险也大:轴一多,颜色和线型的对应关系就容易混乱,读者的认知负担会陡增。我的经验是最多三条轴,超过三条就改用多面板,牺牲一点"同框对比"的直观性,换取可读性。
2.3 Stack、Waterfall、Contour 这类自带布局的图层
Origin 里有一批"开箱即用"的图型,比如瀑布图、等高线图、堆叠线图。它们的共同特点是:内部其实已经用到了多图层或者多数据集的偏移机制,只是被封装成了一个命令。用它们的价值在于快,代价是可控性差——想微调某一层的偏移量、想单独给某一层换颜色,往往要绕到图层管理里去改。
我处理大量同构数据(比如几十条不同条件下的光谱)时,会优先用 "Stack Lines by Y Offsets" 这类功能一次性铺开,然后进图层管理逐个微调。手动一层层加数据在数据量大的时候完全不现实。
2.4 多面板与 Layout 页面:两种拼图思路的取舍
需要把好几张独立的图拼成一张大图时,有两条路。第一条是 Multi-Panel,直接把若干组数据按几行几列铺进同一个 Graph 窗口,每个面板是一个图层。第二条是 Layout 页面,把已经画好的多个 Graph 窗口像贴图一样摆到一张更大的版面上。
两者的差别在于"数据是否还活着"。Multi-Panel 里每个面板仍然连接着原始工作表,改数据图就变;Layout 页面里嵌入的是图形对象,改数据需要回到原图再更新。做论文配图时我一般用 Multi-Panel,因为投稿过程中改数据、改刻度的概率很高,绑定着数据能省掉大量重复劳动。
3. 从零搭一个双 Y 轴图:每一步在改什么
3.1 数据准备阶段最容易忽略的列角色
工作表里每一列都有角色(X、Y、Y Error、Label、Disregard 等)。这件事听起来是常识,但图层出问题时有相当一部分根源就在这儿。如果用来做 X 的那一列角色没设成 X,新建图层时 Origin 会自己猜,猜错了就出现"所有点堆在一根竖直线上"这种诡异现象。
我的固定动作是:拿到数据先全选,右键把角色统一设成 Y,然后手动把第一列设成 X。这么做比让软件自动判断可靠得多,尤其是数据里含有时间字符串或者不规则间隔的采样点时。另外,如果几条曲线的 X 不是同一组值(比如两条曲线的采样点不同),不要图省事共用一列 X,老老实实各自带一列,否则插值出来的东西不是你要的。
3.2 用 Plot Setup 建图层,而不是靠鼠标拖拽
拖拽列到图上确实快,但它在建多图层时有个致命问题:你很难精确控制"这次是新建一个图层,还是加到已有图层里"。Plot Setup 对话框虽然界面朴素,但它是唯一能把"数据 → 图层"的映射关系看全的地方。
在 Plot Setup 里,上半部分是可用数据列表,下半部分是图层结构树。选中某个图层,再选数据,点 Add,数据就被挂到那个图层上。想新建图层就点 New 然后选类型(2D、Double-Y、Multiple-Y 等)。这个操作顺序的好处是每一步的结果都能在结构树里立刻看到,出错了当场就能发现,而不是画完才发现数据挂错了层。
3.3 两条 Y 轴的刻度、颜色与单位密度对齐
双 Y 轴建好之后,第一件事是给两条轴定范围,而不是急着调颜色。范围建议从数据本身的物理意义出发:如果左轴是浓度,就从 0 开始;如果右轴是响应信号,允许从负值起。不要为了"让曲线不贴边"去硬改范围,那会让刻度的整数间隔变得难看。
第二件事是单位密度对齐,这是让双 Y 轴图从"能看"变成"专业"的关键一步。假设左轴范围 0–100,绘图区高度 6 cm,那么密度是 16.67 units/cm。如果右轴范围 0–5000,想让两条曲线的视觉高度相近,右轴的高度也应该接近 6 cm,密度约 833 units/cm。操作路径是打开图层属性,在 Link Axes 相关设置里勾选联动并填写 Units per cm,或者干脆手动把两个图层的位置和高度设成一样的数值。很多"双 Y 轴图看起来一大一小"的问题,根子都在这里。
第三件事才是颜色。经验做法是:轴的颜色跟着曲线走。左轴、左轴上的曲线、左轴的标题三者同色,右轴同理。这样读者不需要看图例就能建立起"哪根轴对应哪条线"的映射。
3.4 图层激活状态带来的那些"灵异事件"
Origin 的 Graph 窗口里始终有一个"当前活动图层",窗口左上角会有标记提示。你做的任何改轴、改图例、加文字的操作,作用的都是当前活动图层。这就导致一个高频问题:明明改了刻度,结果改到了另一个图层上,回头一看自己那层纹丝不动。
解决方法是养成"动手前先点一下目标绘图区"的习惯,确认活动状态变了再操作。另外,图层管理面板里可以一次性看到所有图层的数据集和显示状态,如果怀疑改错了对象,去那里核对一下比来回试要快得多。图层多的时候我基本是开着这个面板工作的。
4. 图层多了之后的空间管理:位置、尺寸与联动
4.1 用图层属性定尺寸,不要用鼠标拖
鼠标拖绘图区边框看起来很直观,但它在多图层场景下几乎必然带来错位:你以为两个图层左右对齐了,实际差了两三个像素,放大看很明显。正确做法是通过图层属性里的 Size 页,直接用数值填 Left、Top、Width、Height,单位选厘米。
这一步的价值在批量制图时会被放大。假设你要出十张结构相同的图,只要把这套尺寸参数记下来,或者保存成一个模板格式应用过去,十张图的布局就会完全一致。用鼠标拖的话,十张图十个样,最后排版时又是一轮返工。
4.2 共享一根 X 轴:联动设置和手动对齐两条路
横轴联动有两种实现方式。一种是自动联动,在图层属性里把当前图层链接到主图层,之后改主图层的 X 范围,从属图层跟着变。这种方式适合"分层结构"明确的场景,比如双 Y 轴、上下两层共享时间轴。
另一种是手动对齐,两个图层互不联动,但把 Left 和 Width 设成完全相同的值,X 的 Scale 也填成一样的范围。这种方式的好处是稳定——不会出现"我改了 A,B 莫名其妙也跟着变了"的情况。代价是后期维护要靠自觉,改一处就得改两处。我处理关键图时更倾向手动对齐,因为投稿返修阶段最怕的就是意外联动把图改坏了。
4.3 用排列功能批量排版
Graph 窗口空白处右键能找到排列图层的功能。它能做的事比多数人以为的多:指定行数和列数、设置行间距和列间距、让所有面板等宽等高、统一边框。手工摆六个面板至少十分钟,用它几秒钟。
我的常用配置是:两行两列、行列间距按页面宽度的 3% 设置、所有图层尺寸自动拉齐。间距这个数值不要设成 0,因为面板紧贴在一起时,相邻的两根坐标轴会粘成一条线,看起来像一根轴两个标签,非常不专业。留一点点缝隙,视觉上立刻清爽。
4.4 图层管理面板:改名、查数据、隐藏图层
数据一多,图层名字就乱了。默认名称是 Layer1、Layer2,画到第六层的时候你已经不记得哪层是哪组数据了。图层管理面板里可以给每层改一个有意义的名称,比如"左轴-浓度""右轴-电流"。这个动作花三十秒,后期改图能省半小时。
面板里还能做几件实用的事:查看每一层挂了哪些数据集;临时隐藏某一层看效果(隐藏不等于删除);调整图层的叠放顺序。有时候两个图层内容重叠,谁在上面会直接影响可读性,这时候顺序就需要手动调。
5. 图层一多就容易翻车的细节:图例、轴标题与数字格式
5.1 图例从竖排改成横排的两种做法
图层多了以后,图例条目会跟着变多,竖排图例能占掉半张图的高度。解决方式有两种。第一种是改图例对象的列数,把单列改成多列,条目就自动横向铺开;这种方式快,但列宽和图例位置的微调要靠眼睛看。第二种是手动编辑图例文本,用占位控制符逐条声明,然后自己用空格和换行排出想要的形状;这种方式麻烦,但排出来的效果最干净,尤其是条目名字长短不一的时候。
一个容易踩的坑是:手动改过的图例不会再随图层自动更新。后面如果删了一条曲线,图例里还留着它的名字,容易被忽略。所以手动编辑图例这一步,最好放在数据完全定稿之后再做。
5.2 数字格式与小数位数
坐标轴刻度的数字格式在刻度标签设置里改,可以选择定点小数、科学计数、工程计数等,小数位数直接填。这里有个实际问题:同一张图里,左轴是 0.002 这种小数量级,右轴是 1500 这种大数量级,如果都用定点小数,左轴会挤成一团,右轴会显示一长串没意义的零。这时候左轴用科学计数、右轴用定点整数,是最清楚的组合。
不要在图上出现"有效数字不一致"的情况。比如左轴刻度写 0.0020、0.0025,右轴写 1500、2000,前者四位有效数字、后者两位,读者会困惑到底哪个精度是真的。统一到同一精度级别,或者干脆在轴标题里说明单位,都是可行方案。
5.3 字体统一与主题复用
默认字体不符合期刊要求是常态。改的方式有两条:一条是逐张图改,改到最后容易漏;另一条是改全局默认,然后保存成主题格式,后续新图直接套用。我一般先把常用的字体、字号、轴标题格式、刻度朝内朝外这些一次性配置好,存成主题,之后所有图都基于这个主题生成。期刊换要求的时候,只改主题再批量应用,比一张张改效率高一个数量级。
需要提醒的是,主题保存的是格式,不是数据。应用到新图上之后,图层的数量、位置、坐标范围还是要单独检查。我吃过一次亏:主题里的图层高度是针对六面板图设计,套到双 Y 轴图上之后,绘图区被压得很扁,曲线几乎看不出趋势。
5.4 坐标轴比例失真与"看起来被拉长"的图
改动绘图区的宽高比会直接改变图的视觉印象。一个原本上升平缓的趋势,把宽度压缩一半之后会显得很陡。这在科研图里是有风险的,因为它影响读者对变化速率的判断。
处理办法是:涉及速率、斜率的图,尽量保持绘图区接近正方形,或者至少保持宽高比在合理区间;如果确实需要拉长来容纳更多横轴内容,就在正文或图注里说明。另一种做法是锁定宽高比,让软件在缩放时保持比例不变,避免手滑改坏。
6. 几类典型多图层图的实操复现
6.1 柱状图叠在一起怎么分开
柱状图"叠在一起"通常不是图层的问题,而是分类变量和分组变量的角色没设对。如果你有两组柱子要在同一 X 位置并排显示,需要的是"分组"结构,而不是"堆叠"结构。做法是:先确认用于分组的列角色正确,然后在柱状图的绘图细节里把偏移量从 0 调成合适的值,柱子就会向两侧错开。
另一种情况是不同数据集的柱子落在同一个 X 坐标上互相遮盖,这通常因为没有给它们设不同的 X 偏移,或者它们被画在了同一个图层里而没有分组信息。最干净的办法是把两组柱子拆到两个图层,共享同一根 X 轴,然后分别设置偏移量,一正一负。这样既保证了视觉上的并排,又让每组柱子的颜色、边框、标签都能独立控制。
还有一种情况是原本想画并排,结果画成了上下累计。这是柱状图类型选错了,把分组柱改成了堆叠柱。两者的视觉差异很大,但菜单里就挨着,点错很正常。
6.2 瀑布图的多图层结构
瀑布图的本质是"多个柱子在 X 方向错位排布,同时用连线或折线标出累计值"。Origin 里有现成的瀑布图模板,直接用能省不少事。它内部的结构通常是一层柱子、一层累计折线,有时候再加一层基准线图层。
自己搭的话,思路是:把每个阶段的贡献值作为一组柱子,在柱状图绘制选项里设置 X 方向偏移,让它们首尾相接而不是重叠。然后新建一个图层画累计值折线,把这个图层的高度、Left、Width 调成和柱子图层一模一样,这样折线的节点才会精准落在柱子的中心线上。这一步如果尺寸不一致,折线会整体偏移半格,看起来非常别扭。
我个人的偏好是:数据量小(少于十段)的时候手工搭,可控性好;段数多的时候用模板生成再微调,因为它自动算偏移和累计,比手算快得多。
6.3 频率分布直方图叠加拟合曲线
这类图的典型结构是两层:一层是直方图(柱状),一层是拟合曲线或者概率密度曲线(折线)。难点在于两者的纵轴含义不同——直方图是频数,曲线是密度。如果直接叠在一起,曲线的位置会因为量纲问题跑到图外或者贴地。
处理方式有三条路。第一条是把直方图改成密度形式,这样两者量纲一致,可以直接叠。第二条是保留频数,把曲线放到右 Y 轴,这就是标准的双 Y 轴图层结构。第三条是用同轴异刻度,在图层属性里给第二组数据设一套独立的刻度,这种方式其实介于单图层和多图层之间,适合快速出图但不利于后续调整。
我最常用的是第二条,理由是物理含义清楚:左边是"有多少个样本落在这个区间",右边是"概率密度有多高",两个问题分开回答。代价是图看起来稍复杂,需要在图例里说清楚哪条线对应哪根轴。
6.4 符号上加横线:平均值标注的规范做法
给符号加横线(比如表示均值)看起来是个小问题,实际很容易做成"像是随手贴上去的"。比较稳的做法有两种。一种是在文本对象里用上下划线控制符把字符包起来,让横线的位置和字符宽度自动匹配;具体控制符写法各版本略有差异,建议先在空白文本里试一次确认效果。另一种是插入一个独立的直线对象,手动放到字符正上方,然后把这个直线和文本对象成组,以后移动时一起动。
第二种方式土,但胜在可控。手工摆的横线宽度可以精确到和字符一样宽,这在图注里看起来是最整齐的。用第一种方式的话,如果字体变了,横线位置可能跟着偏,需要重新检查。
如果图里有多处这样的标注,建议统一用一种方式,不要一半用控制符一半用手摆的线。混用之后,一旦整体缩放或者换字体,两批标注的表现会不一致,返工很麻烦。
最后说一个我自己反复验证过的小习惯:任何多图层图做完之后,先把整个 Graph 窗口导出成图片,放大到 200% 看一遍。在 Origin 窗口里看着对齐的两根轴,导出之后常常能看出半像素级别的错位,尤其是用鼠标拖过尺寸的图层。这个检查动作花不到一分钟,但能挡掉大部分"交出去之后被人指出来"的尴尬。层数越多,这一步越值得做。