1. 从一张被审稿人嫌弃的散点图说起
如果你在实验室待过一段时间,大概率见过这样的场景:辛辛苦苦跑完一组实验,把数据丢进Origin,默认生成一张散点图或者点线图,然后直接截图贴进论文。结果导师看了一眼说“这图太乱了”,审稿人回复里也来一句“Figure X is not informative”。问题出在哪?不是数据不行,而是图没有把信息层次拉开。
散乱的点线图有个通病:所有数据点平铺在一个平面上,不同条件、不同批次、不同时间点的曲线互相穿插,读者根本分不清谁是谁。尤其是当你有五六组甚至十几组数据时,默认配色和默认线型会让整张图变成一团彩色毛线。而叠层图(也叫瀑布图、堆叠偏移图、waterfall plot)解决的正是这个问题——它把每组数据在纵向上做一个固定偏移,让曲线像台阶一样层层叠起来,既保留了每条曲线的完整形态,又让组与组之间的对比一目了然。
这篇文章要讲的就是怎么在Origin里把一张“散乱的点线图”改造成“美观的叠层图”。我会从数据组织、偏移量计算、坐标轴处理、配色方案、导出设置这几个环节一步步拆开讲,中间穿插我自己踩过的坑和实验室里流传的一些小技巧。无论你用的是Origin 2019、2021还是更新的中文版,操作逻辑基本一致。适合已经会基本绘图但想让图更“能打”的研究生、科研人员和需要做数据汇报的工程师。
叠层图不是什么新发明,光谱学、电化学、材料表征领域早就用烂了。但很多人以为它只能靠手动拖拽数据点来实现,其实Origin里有更聪明的做法。下面我从头讲。
2. 叠层图到底解决什么问题,以及什么数据适合这么画
2.1 散乱点线图的三个致命伤
先明确痛点,才知道改造的方向。默认点线图在科研场景下通常有三个问题。
第一是视觉遮挡。当两条曲线的数值范围重叠时,后面的曲线会被前面的挡住,你只能看到最上面那条。比如做循环伏安测试,五组不同扫描速率下的曲线,氧化峰和还原峰的位置差不多,只是电流大小有差异,平铺画出来就是一团。
第二是组间对比困难。人眼对纵向位置的敏感度远高于对颜色的敏感度。平铺图里你要靠图例去对应颜色,再在脑子里把每条曲线“拎”出来比较。叠层图直接给每组一个纵向基线,对比变成看“台阶高度”和“台阶形状”,认知负担小得多。
第三是信息密度低。一张图占的版面是固定的,平铺图浪费了大量纵向空间。叠层图把纵向空间利用起来,同样的版面能塞进更多组数据,而且不显拥挤。
2.2 哪些数据天生适合叠层
不是所有数据都适合叠层。我总结了一个简单的判断标准:如果每组数据的横坐标范围相同或高度重叠,且纵坐标的绝对数值不是比较的重点,那就可以考虑叠层。
典型适用场景包括:
- 光谱类:红外光谱、拉曼光谱、紫外可见吸收光谱、XPS窄扫谱。不同样品或不同处理条件下的谱图,峰位对比是重点,绝对强度不重要。
- 电化学类:循环伏安曲线、恒流充放电曲线、交流阻抗谱。不同扫描速率、不同循环圈数下的曲线。
- 热分析类:TGA、DSC曲线。不同升温速率或不同配方的曲线。
- 力学类:应力-应变曲线。不同温度或不同应变速率下的曲线。
- 色谱类:不同样品的色谱流出曲线。
反过来,如果纵坐标的绝对数值本身就是结论(比如你要比较不同样品的产率),那叠层反而会误导读者,这时候应该用柱状图或箱线图。
2.3 叠层图的两种主流形态
实际操作中,叠层图有两种做法,效果和适用场景不同。
一种是固定偏移叠层,每组数据在Y方向上加一个相同的常数偏移量,曲线形状完全不变,只是整体上移。这种适合组数不多(3到8组)、曲线纵向跨度不大的情况。
另一种是归一化后叠层,先把每组数据归一化到相同的高度,再加偏移。这种适合曲线纵向跨度差异很大的情况,比如有的样品信号强有的弱,归一化后形状对比更清晰。但要注意,归一化会丢失强度信息,如果强度本身有意义就不能这么做。
我下面主要讲固定偏移的做法,因为它在Origin里实现起来最直接,也最不容易出错。归一化的变体我会在第五节提一下。
3. 数据准备阶段:把“一列一列”变成“一组一组”
3.1 原始数据的常见组织方式及其问题
大多数人拿到数据时,Excel里是这样的:第一列是横坐标(比如波长、时间、电压),后面每一列是一组纵坐标。导入Origin后,默认会把每一列都当成一个独立的Y数据集,横坐标共用第一列。这种组织方式本身没问题,问题在于很多人直接选中所有列就画图,结果出来一堆颜色各异的散点。
要画叠层图,你需要先想清楚:哪一列是公共横坐标,哪些列是需要叠层的Y数据,偏移量是多少。这三个信息确定了,后面的操作就是机械劳动。
3.2 在Origin里重建工作表结构
我的习惯是在原始数据旁边新建几列,专门用来存放“偏移后的Y值”。具体做法是:
假设你有5组数据,横坐标在Col(A),原始Y在Col(B)到Col(F)。那么新建Col(G)到Col(K),每一列对应一组偏移后的数据。偏移量设为Δ,那么:
- Col(G) = Col(B) + 0×Δ
- Col(H) = Col(C) + 1×Δ
- Col(I) = Col(D) + 2×Δ
- Col(J) = Col(E) + 3×Δ
- Col(K) = Col(F) + 4×Δ
在Origin里可以用Set Column Values功能批量设置。右键点击目标列,选择“Set Column Values”,在公式框里输入类似Col(B)+0*100的表达式。这里100就是偏移量Δ,具体取多少要看你的数据范围。
提示:偏移量不要拍脑袋定。一个实用的方法是先看所有Y数据的最大值和最小值之差,把这个差值除以(组数-1),再乘以1.2到1.5的系数,作为偏移量的初始值。这样能保证相邻曲线之间有明显间隙但又不至于太散。
3.3 偏移量到底取多少才合适
这是叠层图好不好看的关键。偏移量太小,曲线会挤在一起甚至重叠;偏移量太大,图会拉得很长,每组曲线被压扁,细节看不清。
我一般用这个公式估算:
Δ = (Y_max - Y_min) × k / (n - 1)
其中Y_max和Y_min是所有组数据中的全局最大值和最小值,n是组数,k是间隙系数,通常取1.3到1.8。k越大,曲线之间的空白越多。
举个例子:5组数据,全局最大值是1200,最小值是-200,差值1400。n-1=4。如果k取1.5,那么Δ = 1400 × 1.5 / 4 = 525。这个偏移量下,最上面那组曲线的最高点会到1200 + 4×525 = 3300左右,最下面那组的最低点是-200。整个Y轴范围大约3500,每组曲线占约1400的高度,间隙约525,比例比较舒服。
当然这只是初始值,实际还要根据曲线形状微调。如果曲线本身很平,可以适当减小k;如果曲线有尖锐的峰,k要大一点,否则峰尖会碰到上一组的基线。
3.4 用“Layer”还是用“偏移列”:两种技术路线的取舍
Origin里实现叠层有两种技术路线。
路线一:单图层+偏移列。就是把偏移后的数据放在同一个图层里画,所有曲线共用一个Y轴。优点是操作简单,导出后是一张完整的图,后期在AI或PS里处理方便。缺点是Y轴刻度是偏移后的数值,没有物理意义,需要手动改刻度标签。
路线二:多图层堆叠。每组数据单独一个图层,图层在垂直方向堆叠,每个图层有自己的Y轴。优点是每个图层可以独立设置Y轴刻度和标签,物理意义清晰。缺点是图层对齐麻烦,导出时容易错位,而且图例管理复杂。
我个人的选择是:如果组数少于6组,且不需要每组独立的Y轴标签,用路线一。如果组数多,或者每组数据的Y轴范围差异很大需要单独标注,用路线二。这篇文章主要讲路线一,因为它是大多数人的需求,而且做出来的图更“整”。
4. 从散点到叠层:一步步改造你的图
4.1 先画一张“干净”的基础图
不管你后面怎么叠,基础图的质量决定了最终效果。我的建议是:先只画一组数据,把线条、符号、坐标轴、字体都调好,然后再复制格式到其他组。
具体操作:选中Col(A)和Col(G)(第一组偏移后的数据),插入散点图或点线图。然后做以下设置:
- 线条:如果数据点密集,用“Line”模式,线宽0.5到1.0。如果数据点稀疏,用“Line+Symbol”,符号大小3到5。
- 颜色:先不要急着上彩色,用黑色或深灰色。叠层图的颜色方案后面单独讲。
- 坐标轴:横坐标刻度根据数据范围设置,纵坐标暂时不管,后面统一调。
- 字体:Arial或Helvetica,字号8到10。中文用宋体或黑体,字号9到10.5。
这一步的关键是把单组曲线的样式定下来。因为后面所有组都会用同样的样式,只是位置不同。如果单组曲线看起来不舒服,叠起来只会更糟。
4.2 批量添加其他组数据
样式定好后,右键点击图层,选择“Plot Setup”或者直接在“Layer Contents”里添加其他偏移列。把Col(H)到Col(K)依次加进去。这时候你会看到所有曲线都叠在一起,因为偏移量还没生效——等等,如果你已经在Set Column Values里加了偏移,那它们应该已经分开了。
如果发现曲线还是挤在一起,检查一下Set Column Values的公式有没有写对。常见错误是忘了加偏移量,或者偏移量写成了固定值但数据范围变了。
添加完所有组后,图应该呈现出阶梯状。这时候需要做几件事:
- 调整Y轴范围,让所有曲线完整显示,上下留出适当空白。
- 如果曲线之间有重叠,微调偏移量。
- 给每组曲线设置不同的颜色或线型。
4.3 坐标轴的“欺骗性”处理
叠层图有一个绕不开的问题:Y轴刻度是偏移后的数值,没有物理意义。比如你原本的电流是微安级别,偏移后变成了几千。直接展示会让人困惑。
处理方法有两种:
方法一:隐藏Y轴刻度,只保留轴线和标签。在坐标轴设置里,把Y轴的Major Ticks和Minor Ticks都设为None,只显示轴线。然后在每组曲线旁边手动添加文本标注,说明这组对应的条件。这种方法适合组数少、每组条件需要文字说明的情况。
方法二:自定义Y轴刻度标签。保留刻度线,但把刻度标签改成有意义的值。比如第一组曲线的基线在0,第二组在500,第三组在1000,你可以把Y轴刻度设为0、500、1000、1500,然后把标签改成“0”、“1”、“2”、“3”或者对应的条件名。在Origin里双击Y轴刻度标签,可以手动输入自定义文本。
我通常用方法二,因为看起来更“正规”。具体操作:双击Y轴,在“Tick Labels”选项卡里,把“Type”设为“Text from dataset”或者直接手动输入。如果组数多,可以建一列文本,用“Column”方式引用。
注意:自定义刻度标签后,一定要检查刻度线和标签是否对齐。有时候偏移量不是整数,刻度线会落在奇怪的位置。解决办法是把偏移量取整,或者手动指定刻度位置。
4.4 图例的处理:横向排列与分组标注
默认图例是纵向排列在图的右侧,组数多了会占很大空间。叠层图的图例更适合横向排列在图的顶部或底部。
在Origin里,右键图例选择“Properties”,在“Background”里把边框去掉,在“Text”里调整字体。然后在“Legend”选项卡里,把“Arrangement”设为“Horizontal”。如果图例项太多,可以分两行。
另一种做法是不用图例,直接在曲线旁边标注。比如在每组曲线的右端或左端加一个文本标签,写明条件。这种“直接标注”在叠层图里非常常见,因为读者看曲线时视线就在图上,不需要来回对照图例。
具体操作:用“Text”工具在曲线旁边加文本框,或者用“Data Display”功能在特定数据点旁边显示标签。后者更精确但设置麻烦,前者更灵活。
5. 让叠层图“美观”的五个细节
5.1 配色:不要用Origin默认的彩虹色
Origin默认的配色是红、绿、蓝、青、品红、黄……这套颜色在叠层图里非常刺眼,而且相邻颜色对比度不够。我的建议是:
- 如果组数少(3到5组),用同色系渐变。比如从深蓝到浅蓝,或者从深红到浅橙。这样既有区分度,又不会显得杂乱。
- 如果组数多(6组以上),用两组对比色交替。比如深蓝、深红、中蓝、中红、浅蓝、浅红。这样相邻曲线颜色不同,但整体只有两个色系。
- 如果必须用多色,避开纯红和纯绿同时出现,因为红绿色盲读者无法区分。
在Origin里设置颜色:双击曲线,在“Line”选项卡里点颜色下拉框,选择“More Colors”可以自定义RGB值。我常用的几组配色:
| 组数 | 配色方案 | RGB参考 |
|---|---|---|
| 3组 | 深蓝-中蓝-浅蓝 | (31,73,125), (68,114,196), (180,198,231) |
| 4组 | 深红-中红-浅红-灰 | (150,30,30), (200,80,80), (230,150,150), (128,128,128) |
| 5组 | 蓝红交替 | (31,73,125), (150,30,30), (68,114,196), (200,80,80), (180,198,231) |
| 6组以上 | 双色系渐变 | 蓝系三阶+红系三阶交替 |
5.2 线宽与符号:叠层图的“呼吸感”
叠层图里曲线密集,线宽太粗会显得闷,太细又看不清。我的经验值是:线宽0.5到0.8,比普通平铺图细一点。因为叠层图里曲线数量多,细线能让每一条都“透气”。
符号方面,如果数据点密集(比如光谱数据有上千个点),不要用符号,只用线。如果数据点稀疏(比如十几个点),用符号+线,符号大小3到4,符号边缘线宽0.5。
还有一个细节:相邻曲线的线型要区分。如果颜色相近,用实线、虚线、点线交替。如果颜色区分明显,可以都用实线。我一般用实线和虚线交替,这样即使打印成黑白也能区分。
5.3 基线处理:要不要画一条水平参考线
叠层图里,每组曲线的“基线”位置其实是人为设定的偏移量。有些作者会在每组曲线的基线位置画一条浅灰色的水平线,帮助读者看清偏移量。这个做法有利有弊。
好处是读者能清楚看到每组曲线的起点和偏移量,对比更直观。坏处是如果曲线本身有背景信号,基线线会和曲线混在一起,反而乱。
我的建议是:如果曲线在两端有明显的平坦区域(比如光谱的基线区),可以画基线线。如果曲线全程都在变化,不要画。画的话,用浅灰色(RGB 200,200,200),线宽0.3,放在曲线下层。
5.4 坐标轴边框与刻度:做减法
叠层图的坐标轴要尽量简洁。具体做法:
- 去掉顶部和右侧的边框线(在Origin里叫“Top”和“Right”轴,设为“None”)。
- 刻度线朝内,长度3到4,Major Ticks间隔根据数据范围定,Minor Ticks可以不要或者设1到2个。
- 坐标轴标签字体比刻度标签大一号,加粗。
- 如果Y轴用了自定义标签,确保标签和刻度线对齐。
5.5 导出设置:分辨率和格式的坑
最后一步导出,很多人在这里翻车。常见问题:导出的图在Word里模糊,或者插入LaTeX后字体变了。
我的导出设置:
- 格式:EPS或PDF(矢量图),如果期刊要求TIFF,用600 dpi。
- 尺寸:单栏图宽度8.5 cm,双栏图17 cm。高度根据组数定,一般10到15 cm。
- 字体:导出时嵌入字体,或者把图里的文字转成曲线(但转曲线后不能编辑,慎用)。
- 背景:透明或白色,不要用默认的灰色。
在Origin里导出EPS:File → Export Graphs → Open Dialog,选择EPS格式,设置好尺寸和分辨率。如果导出后字体变了,检查“Font Embedding”选项。
6. 那些年我踩过的叠层图坑
6.1 偏移量取整导致的“台阶不齐”
有一次我帮师弟改图,他的叠层图看起来总是“歪”的,每组曲线的间距不一样。查了半天发现,他的偏移量设的是137.5,但Y轴刻度设的是100的整数倍。结果曲线基线落在刻度线之间,视觉上就不齐。
解决办法:偏移量取整,且和Y轴刻度间隔成整数倍关系。比如Y轴刻度间隔是500,偏移量就取500或1000。这样每组曲线的基线都落在刻度线上,看起来整齐。
6.2 图例顺序和曲线顺序不一致
Origin默认按图层内容顺序排列图例,但如果你后来调整了曲线的添加顺序,图例可能和实际曲线不对应。更坑的是,如果你用了“Offset”功能而不是手动加偏移列,图例可能显示的是原始列名,而不是你想要的标签。
解决办法:手动编辑图例文本。双击图例,直接修改文字。或者在图例属性里,把“Legend Text”设为“Custom”,然后手动输入每组对应的标签。
6.3 导出后曲线变粗或变细
这是矢量图导出的常见问题。Origin里线宽0.5,导出EPS后在AI里打开可能变成0.3或0.8。原因是Origin的线宽单位和导出后的单位不一致。
解决办法:导出前把线宽设为“Points”而不是“mm”,并且在导出设置里勾选“Keep Line Width”。如果还是不对,在AI里全选曲线,统一设置线宽。
6.4 数据点太多导致文件巨大
光谱数据动辄几千个点,5组就是上万点。如果每个点都带符号,EPS文件会大到几十MB,插入Word后卡顿。
解决办法:对数据进行抽稀。在Origin里用“Decimate”功能,每隔N个点取一个。对于光谱图,N取5到10通常不影响视觉效果。或者直接只用线,不用符号。
7. 进阶玩法:归一化叠层与三维叠层
7.1 归一化叠层:当曲线高度差异太大时
如果不同组的曲线纵向跨度差异很大,比如第一组峰值100,第二组峰值5000,固定偏移量下第一组会被压成一条直线。这时候需要先归一化。
做法:在Set Column Values里,把每组数据除以该组的最大值(或最大值-最小值),然后再加偏移。公式类似Col(B)/max(Col(B))*1000 + 0*500。这样每组曲线的峰值都归一化到1000,再加偏移。
归一化叠层适合比较曲线形状,但不适合比较绝对强度。用的时候要在图注里说明“曲线已归一化”。
7.2 三维叠层:用Origin的3D功能做“真”瀑布图
Origin有内置的3D瀑布图功能(Plot → 3D → Waterfall),可以直接把多组数据画成三维叠层。效果很炫,但我不推荐在论文里用,因为三维投影会引入视觉畸变,读者很难准确读取数值。如果只是做汇报PPT,可以用。
三维瀑布图的设置关键是视角。在“3D Rotation”里,把X旋转设为-30到-45度,Y旋转设为15到30度,Z旋转设为0。这样曲线有立体感但不至于变形太厉害。
7.3 用“Pattern”功能批量复制格式
如果你经常画叠层图,可以做一个模板。把调好的图保存为“Theme”(右键图 → Save Format as Theme),下次画图时直接应用。这样不用每次都重新设置线宽、颜色、字体。
模板的另一个好处是统一实验室的图风格。我们实验室就有一个共享的Origin Theme文件,所有人画图都套这个模板,组会汇报时图看起来整齐划一。
8. 一些零碎但有用的经验
关于中文版Origin:2021之后的版本中文支持很好,但有些菜单翻译和英文版对不上。比如“Layer Contents”在中文版里叫“图层内容”,“Plot Setup”叫“绘图设置”。如果看英文教程找不到对应菜单,切换成英文界面再找。
关于横坐标显示实际天数:如果你的横坐标是时间序列,比如第1天到第30天,Origin默认可能显示1、2、3……你需要双击横坐标,在“Tick Labels”里把“Type”设为“Date”,然后选择合适的时间格式。或者手动设置刻度位置为1、5、10、15、20、25、30。
关于图例横向排列:前面提过,在“Legend”属性里设“Horizontal”。如果图例项太多一行放不下,可以设“Column”数量,比如2列或3列。
关于把某条曲线置于顶层:在叠层图里,如果曲线有重叠,你可能想让某条曲线显示在最上面。右键曲线 → Order → Bring to Front。或者在图层的“Plot Details”里调整“Group”顺序。
关于累积分布函数:如果你画的是CDF图,叠层逻辑和平常一样,但要注意CDF是单调递增的,偏移后曲线会一直往上走,视觉上可能不太好看。这种情况建议用平铺图或者只叠3到4组。
关于箱线图的叠层:箱线图一般不平铺叠层,因为箱体本身有高度,叠起来会混乱。如果一定要叠,用“Box Chart”的“Offset”功能,但效果通常不如分组箱线图。
最后说一个心态问题:叠层图不是万能的,不要为了好看而强行叠层。如果数据本身适合平铺,就平铺。图的目的是传达信息,不是炫技。我见过太多为了“高级感”把简单数据画得花里胡哨的图,反而让读者困惑。先把数据讲清楚,再考虑美观。