
用Origin画桑基图其实比你想的简单数据整理才是真正的分水岭每次有学生拿着一张用Excel箭头拼出来的“流向图”找我我都会建议他换桑基图试一下。原因很简单科研中最常遇到的一种数据关系不是“谁比谁大”而是“什么变成了什么”。样本筛选、患者入组、能量流转、物质分配、用户行为路径全是这类结构。用Origin画桑基图本质上是把你脑子里那条“从哪来到哪去”的逻辑用一条可以量化的流量带摆到审稿人面前。这篇博文不讲虚的直接围绕Origin中桑基图的数据格式、绘图流程、美化细节和真实踩坑经历展开适合正在用Origin做毕业论文配图、期刊插图或者想把汇报PPT里的流程图画得更专业的科研人员。先说一个核心判断这个功能本身不复杂复杂的是数据表怎么组织。Origin从2021版本开始原生支持桑基图菜单路径清晰、参数不多照着手册点几下就能出图。但如果你数据表的结构还是“一行一个样本、一列一个阶段”那画出来的图大概率是乱的。所以我在全篇会花超过一半篇幅讲数据整理这恰恰是网上教程最不爱细讲、却决定成图质量的部分。1. 为什么科研出图需要桑基图——先搞清楚它的适用边界桑基图的核心视觉语言是“流量带”带宽与数值成正比。一句话总结就是用一条河流的宽窄来表示流程中各个环节的量级河流从源头出发流经每一个节点最后汇入终点。这种表现形式的优势在于读者一眼就能看出“哪个环节损失最多”“哪条路径占比最大”不需要再看具体数字。在科研里我见到最多且最适合用桑基图呈现的场景大概有这么几类。第一类是临床研究或人群筛选中的样本流失图。比如你从一个大型队列里筛选了5000人经过排除标准剩下2200人再经过知情同意和基线检查剩下1800人最后完成随访的只有1200人。评审人非常关心每一步为什么少人、少了多少人。用桑基图可以把每一层的流入、排除、留存画得清清楚楚甚至比文字描述更有说服力。第二类是代谢、能源或物流领域的流向分析。一个系统输入100份能量有的变成有用功有的以热量的形式耗散有的储存在中间产物里。这类物质/能量守恒的数据用桑基图展示几乎是“标准答案”国外很多期刊的支撑材料里都会配一张。第三类是生物信息学里的分组转化关系。比如细胞亚群在时间点A和B之间的动态变化每个亚群有多少细胞变成另一亚群有多少维持不变。数据本身就是一个转移矩阵桑基图正好把矩阵“宽数据”可视化成长链。第四类是工程评估里的成本构成或故障溯源。投入的经费、工时、设备如何分配到各环节最终形成产出或损耗桑基图能让成本流向变得透明。但我也得负责任地说一句桑基图不是万能图。如果你的数据只是简单的几个并列分类比如问卷里“你最喜欢的软件是什么”的统计结果用柱状图或饼图就够了硬上桑基图反而显得刻意。如果你的关系是双向的、相互交织的比如蛋白质互作网络、贸易往来那弦图Chord Diagram或网络图更合适桑基图在表达双向循环关系时会很吃力。判断标准其实就一条数据是否满足“从起点流向终点且每条流有明确的方向和数量”。满足就用不满足换图。2. 绘图前先把数据理清楚宽表变长表的完整过程网上大部分关于Origin桑基图的提问最后都出在数据格式上。很多人把Excel里那种“阶段1作为行、阶段2作为列、中间填人数”的矩阵表直接选中然后找桑基图菜单结果发现Origin根本没有反应。原因很简单Origin的桑基图插件接受的不是矩阵而是“长表”——每一行代表一条具体的流动记录。2.1 认识Origin要求的三种列一张标准的长表至少需要三列列名含义示例Source来源流动的起始节点合格样本Target目标流动的到达节点完成随访Value数值这条流向的数量120如果你要画两级以上的流程不需要另外搞复杂结构把Source和Target按逻辑依次写下去即可。比如筛选流程可以写成五行来源目标值总样本排除30总样本合格样本120合格样本完成随访95合格样本失访25完成随访有效分析90注意一个细节同一列中“总样本”可以作为上一层的目标也可以作为下一层的来源。Origin正是通过这种“同名即同一节点”的逻辑把多级流程串起来的。也就是说只要你确保节点名称完全一致包括空格、大小写它就会自动合并。这个机制用熟了以后非常方便想加一级流程只需要在表尾追加几行新记录不用改前面画好的部分。2.2 宽表变长表的两种操作方法最原始也最稳定的方法是在Excel里操作思路是先建三个新列然后全选原始宽表区域一项项把数据“搬”过去。数据少的时候手动搬没问题数据一多就容易漏。我习惯用“复制转置粘贴”的组合拳把宽表中每一行拆成多条“从上一阶段到下一阶段”的记录每一条填成一行。把各阶段的名称放到A列和B列C列填对应数值。如果一张宽表里有多组平行流程就逐块选中、复制、粘贴到同一个长表区域然后统一做“数据透视表”聚合。第二种方法是用Origin自身的统计功能做聚合。Origin工作表里有“Worksheet→Statistics”类的行统计工具可以对重复出现的同一对Source-Target求和。这个操作很适合从原始记录表直接生成长表如果原始数据是“每个样本一行的状态转移记录”先创建一个辅助列用公式拼出“起点-终点”的组合再利用统计工具按组合求和得到的就是标准的桑基图输入数据。2.3 一个决定成败的守恒检查在把数据导入Origin之前我强烈建议做一次“流向守恒”检查。原则是进入一个节点的总量应当等于离开这个节点的总量除非节点本身就是起点或终点。以筛选流程为例总样本排除合格样本合格样本完成随访失访完成随访有效分析剔除。如果发现某一个节点的流入和流出对不上绝大多数情况是你漏掉了一个“其他”或“未明确”的类别。不要小看这个检查。我见过太多人画桑基图图本身非常漂亮但审稿人稍微一核对总量就发现了缺口整张图的可信度直接归零。一个稳妥的做法是单独建一个“汇总校验”工作表用SUMIF对每个节点求流入和流出之差差值不为零的节点马上暴露出来。3. Origin里从零到一的绘图步骤从菜单到成图数据表准备完毕绘图本身其实只需要几秒钟。这里先提醒一个版本问题Origin 2021及之后的版本才在“Plot”菜单下增加了原生的桑基图入口。如果你手里是2017、2018、2019或2020版打开菜单后是找不到Sankey这一项的这个后面我再细说。这里默认你用的是2021以后的版本。3.1 操作路径与自动生成的图形步骤非常简单在工作表里框选三列Source列、Target列、Value列。点击顶部菜单栏的“Plot”在分类中找到“Categorical”子菜单里选择“Sankey Diagram”。Origin会立即在工作区生成一张默认样式的桑基图。这个默认样式的图通常长这样左右两端是节点矩形中间是一条条从Source指向Target的流量带带宽按数值比例自动缩放流量带颜色和Source节点颜色保持一致。你什么都不用调它已经能清楚地表达数量关系了。但默认图往往有几个问题配色随机、标签重叠、节点顺序不符合故事线、流量带又粗又满、视觉上很“满”。所以真正花时间的不是生成而是下一步的美化。3.2 Plot Details面板里值得调整的选项在图上右键选择“Plot Details”会打开图形属性面板。桑基图相关的设置集中在这个面板左侧的图层列表里选中“Sankey”图层后右侧会显示若干选项卡。我每天都会调的有这几项Flow Properties面板设定流量带最大宽度、宽度比例上限。如果数据跨度极大比如最大10000、最小5默认的等比宽度会让最小流量几乎看不见。这时可以适当压缩“Max width”的比例让细流不至于消失。Node Sorting控制节点排序方式。默认可能是按名称字母序或按数值你可以改成“按数据表顺序”这样节点的上下位置会和你数据表里出现的顺序保持一致非常利于讲故事。Node Label设置是否显示节点名称、节点数值、百分比。我一般会打开“Name”和“Value”关闭自动换行防止节点名称被截断。节点样式节点矩形可以设置填充色、边框色和大小选中某个节点后可以单独改颜色。想批量统一配色时直接CtrlA全选所有节点然后统一填充。这里有一个花时间但很值得做的操作手动微调节点的垂直位置。Origin支持在Sankey图上拖动节点当你觉得自动布局把节点压得太拥挤或者某条流量带绕弯太多的时候手动拖一下节点往往能明显改善图形可读性。注意拖动之后数值关系不会变改变的只是视觉坐标所以放心大胆试。3.3 数据更新后如何让图形同步刷新科研绘图经常面临一个痛点数据改了图忘了更新。Origin默认创建的很多图是“Auto Update”模式即工作表数据变化后图形会自动重新计算。桑基图同样适用。绘图完成后在图上工具栏附近能找到“Recalculate”按钮一般是“Auto Update”或“Manual”两种状态。建议保留Auto Update这样你调整了Value列里的数字点一下图流量带宽度会立刻按新值变化非常适合参数敏感性分析。不过Auto Update也有危险的时候如果你的数据表经过不断增加行、删除行图形有时会出现残留的旧节点。遇到这种情况不要硬调回到数据表彻底清理干净再点一次重新计算比手动删节点快得多。4. 把草图调整成能放进论文的图节点、颜色、标签与字体拿到一张默认桑基图只能算半成品。科研配图的要求是信息清楚、配色克制、字体统一、导出清晰。这一节我把平时用得最多的微调技巧按顺序梳理一遍你可以照着一步步操作。4.1 配色与流量带的视觉层次默认桑基图往往会自动分配高饱和度的彩虹色这在编辑看来是典型的“软件默认风格”。我更推荐的做法是把节点统一换成低饱和度的学术色例如使用一套色盲友好配色蓝、橙、灰、黄等。流量带颜色可以设置为跟随Source节点颜色、跟随Target节点颜色或者完全自定义。流量带透明度适度降低让后面重叠的流程不至于完全遮挡。一般我把透明度设在70%到85%之间。流量带描边尽量弱化颜色设为浅灰或直接用“None”否则粗描边会喧宾夺主。在Plot Details里对应路径是先选中某个节点在Pattern选项卡里改Fill再选中流量带图层在Flow相关选项卡里调整颜色和透明度。如果你希望每一条流量带都有独立颜色可以在数据表里额外加一列“颜色”字段并在绘图时指定按该列着色但这在小组件上会显得很乱我一般不建议默认可视化做这么花。4.2 标签显示的三个层次桑基图上的文字信息一般分三类节点名称、节点数值、流量带数值。你不需要让所有信息全部显示因为那样图会变成一锅粥。我的取舍经验是节点名称一定显示英文名用Times New Roman或Arial中文名用宋体或黑体视目标期刊习惯而定。节点数值在样本量不大几百以内时显示“值”特别大上万人时我倾向于不显示具体数值而是让带宽本身说明问题或者只在正文里写关键数字。流量带数值默认不显示因为流量带数量往往多标上数字反而干扰。除非你的每个节点之间只有三四条流否则建议关闭。标签重叠是桑基图最容易出现的丑态。Origin的标签设置里通常有“Auto Offset”或“Avoid Overlap”选项开启后软件会自动把重叠的文字错开。如果自动效果还不理想可以手动拖动单个标签到空白位置或者把节点名称变短。另一个小技巧节点名称用“缩写图例全称”的组合比如节点显示“T1”图例或注释里写“T1治疗1组”这样标签区域会清爽很多。4.3 字体统一的硬指标很多期刊对插图字体有明确要求图中所有文字要么Times New Roman要么Arial字号一般小五9 pt到六号7 pt。Origin里最省事的做法是图形区域全选后在状态栏的字体下拉框统一改字体再通过“Format→Theme”把当前图的设置保存为一个主题模板以后新绘图直接套用。热搜里有“origin修改默认字体”说明大部分人都被这个事磨过早设置一次主题模板后面每一张图都能受益。如果你的数据标签里出现了中文导出PDF前要留意编码问题。Origin在Windows上导出的PDF中文标签在部分PDF阅读器中会显示成方框。稳妥的办法是导出前把字体改成系统自带中文字体并在“Print Preview”里先看一眼如果期刊允许把节点名称统一换成英文缩写是最省心、最不会出乱码的方案。4.4 画布比例、图例排列与导出参数画布长宽比例直接决定桑基图的视觉节奏。两三个节点的简单流程建议用接近16:9的横向比例五级以上节点链则用更宽的画布避免流量带垂直方向被压扁。调整方式是在Origin里直接拖动画布边框或者“Format→Layer Properties”里设定Layer的宽高比。需要图例的时候右键图例框在“Layout”里选择“Horizontal”横向排列。这是热搜里“origin图例横向排列”对应的操作。横向排列适合少量分组2到5组如果图例项超过6个横向排一长串反而难看这时用竖向排列更好。导出参数上期刊插图一般要求300 dpi以上。Origin里选择“File→Export Graphs”设置Image Type为TIFF或EPSDPI设为600颜色选RGB或CMYK视期刊要求而定。如果之后还要在Illustrator里做微调导出PDF或AI格式更合适如果直接投稿就导出TIFF。5. 实战中踩过的坑从数据到成品最容易翻车的地方这部分是这些年我在实际使用中真正遇到、且解决起来绕了好几个弯的问题挑出来重点讲讲帮大家省点时间。5.1 箭头方向全反了Source和Target列顺序颠倒有次做组学数据转移矩阵画完图后怎么看怎么别扭仔细一看所有箭头方向都反了从“目标”指向“来源”。原因是数据整理时我下意识把“新特征”放在了前面但Origin默认把第一列视为Source第二列视为Target。解决办法当然是最简单的交换前两列位置再绘图。但这里有个隐藏问题交换之后所有节点名称和颜色映射都会变如果你已经微调过样式建议在调整样式之前就确认好列顺序或者单独复制一份工作表保留样式设置。5.2 总量对不上漏掉了“其他”和“未明确”前面提到过守恒检查。这里我想说一个真实案例某次帮学生做随访流向图进入“完成随访”节点的人数是500但从“完成随访”分出去的各流向加起来只有480怎么也找不到那20个人。后来翻原始数据才发现有20人“随访成功但问卷数据无效”分类时既没算进“有效分析”也没单列“剔除”节点20个人凭空蒸发了。补上“剔除”分类后收支平衡审稿人那关才算过去。5.3 流量带堆成一团黑数值跨度太大如果数据里既有1000这样的大数也有2这样的小数Origin默认按线性比例分配宽度结果就是“大带子旁边贴了一条细线”细线在打印稿上几乎看不出来。我当时做生物样本库数据时就遇到这个问题后来用了三个办法解决调整Plot Details里流量带最大宽度的上限抑制最大带宽给细小流量留一点可见空间把极小流量单独归并为“其他”类别减少极值数量如果情况严重可以对Value做非线性变换比如开根号然后关闭数值标签防止误导。最后一条在正式论文里要慎重处理但在探索性可视化阶段很实用。这里还有一个小提醒不要在数据表里提前把值转成百分比。Origin的宽度计算是以绝对值总和为基础的你给它百分比它也能画但后续你再想加一条大流量百分比会因为基数一变而全部失效。填原始数量让软件自己换算这是最稳的。5.4 旧版本没有桑基图菜单版本与替代方案知乎上不少关于“Origin 2017桑基图”的问题老版本的Plot菜单里确实没有Categorical下的Sankey入口。一条稳妥的路线是使用官方新版教育邮箱通常能申请到校园授权或免费试用学生和科研工作者完全可以用合法渠道拿到完整功能。不要依赖网上流传的所谓破解文件除了潜在的法律和安全隐患外破解版在导入复杂数据、导出高清图时经常出现莫名其妙的中文描述“demo”水印或者崩溃投稿时这些坑会消耗你大量时间。如果实在因为课题组统一环境只能用老版本也有其他免费方案可以“曲线救国”用Python的Plotly库或R语言的networkD3包绘制桑基图然后导出SVG插入Origin排版。虽然这不是纯Origin流程但最终放进论文的图完全够用。这篇主要讲Origin就不展开其他工具的具体代码了。5.5 导出PDF后中文字符变成方框Origin导出矢量PDF时嵌入中文字体这一块不是特别友好。先把图中所有文字字体设置成系统自带的中文字体再在导出设置里检查“Embed all fonts”选项并确认PDF阅读器渲染正常。如果检查后发现乱码最简单粗暴的办法是把图中中文全部换成英文标签图注里写中文即可。这个方法土但非常稳很多国际期刊甚至默认要求图内文字为英文不算吃亏。5.6 图太大、节点太密集学会做减法最后一条经验和操作技巧无关而是制图思路。数据阶段有50个节点、200条流全部画在一张桑基图里还没打印就已经像一堆乱麻。这种情况下我会先做数据筛选只保留累计占比达到95%的路径剩余全部并入“其他流”。这一步在数据表里用Excel的排序加筛选功能即可完成。把一张“大型关系网”降维成“主干流程图”信息损失不大但可读性提升极其明显。最后说点个人体会我试过很多种工具画桑基图也踩过很多次数据的坑。Origin在我这里的定位是“出图效率最高的工具”之一因为它和科研人员日常的数据表工作流结合得足够紧密不需要专门写代码微调也直观。但我最想分享的一点是画桑基图这件事真正的核心不在软件而在你对自己数据的理解程度。你越清楚每一条流量的来源和去向你的数据表就越干净成图的逻辑就越顺。一个小技巧送给有需要的人在给节点命名时顺手带上层级前缀比如“S1_总样本”“S2_合格样本”“S2_排除”“S3_完成随访”。这样不仅数据表一眼就能看出层级关系后续就算把图导出到Illustrator里重新排版也完全不会搞混节点。数据量越大这个习惯越值钱。