Origin弦图实操指南:矩阵、边表与分组数据的可视化方法

Origin弦图实操指南:矩阵、边表与分组数据的可视化方法 一说到 Origin很多人脑子里跳出来的是折线图、柱状图、散点图这些“标准动作”。可如果你手里拿的是“谁和谁之间的关系有多强”“某个群体里的流量往哪边流”这类网络关系数据常规图表就很难一眼说清了。这个时候弦图Chord Diagram才是合适的主场。弦图把参与方均匀摆在圆环上用弦的宽窄和弧度表示两两关系或流量大小每个节点在圆环上占多长也对应着它的总辐射量。一眼扫过去哪个组是核心、哪条边是主要通道、方向是从谁流向谁全都清清楚楚。很多科研人一听到弦图第一反应是“这得去学 R 的 circlize 包或者用 Python 的 plotly 吧”。其实 Origin 也能画而且画起来并不复杂。真正的门槛不在于最后点那一下绘图按钮而在于你怎么把数据喂给 Origin。我前前后后帮人整理过不少弦图数据发现大多数问题都出在“数据结构没对齐”。这篇就把我实践下来最常用的 3 种数据形式全部拆开讲透配合具体操作步骤和踩坑记录做组学、生态、经济、城市规划、社会网络分析的朋友都可以直接照着做。1. 弦图到底在表达什么样的数据先搞清楚弦图的读图逻辑数据怎么准备才不会跑偏。弦图本质上是一张“圆形布局的关系网络图”它由两部分组成一是圆环上的节点段每个节点在圆周上占一段弧长弧长越长说明这个节点参与的权重总和越大二是圆内的弦每一条弦连接两个节点弦越粗说明这两个节点之间的统计量越大。如果数据是有方向的比如单向迁移、贸易流向弦两端还会带有方向性通常表现为一端宽一端窄或者通过渐变色表示流向。这也是弦图和热图最大的区别。热图能告诉你某个格子对应的数值大不大但很难直观表达“谁和谁之间的联系在整个系统里占多大分量”。弦图则把“总量、结构、方向”三者压缩在一张圆图里。比如你做物种互作网络矩阵里密密麻麻的数字看起来费劲换成弦图哪些物种是枢纽一目了然你做城市间人口流动研究弦图可以直接把“从哪来、到哪去、量有多大”画成一股一股的流。1.1 弦图适合处理的两类常见关系弦图最常处理的数据本质上只有两类。第一类是成对关系数据每一行每一列都是同一个对象集合交叉点上的数值表示关系强度。典型例子是基因表达相关性矩阵、物种共存矩阵、成分共现矩阵。第二类是流数据数据天生就带有“源头—目的地—流量”三要素例如贸易进出口量、人口迁徙量、科研合作论文数、关键词共现频次。两类数据在 Origin 里的组织方式不完全一样前者更适合矩阵型结构后者更适合边表结构这也正是后面要展开讲的第 1 种和第 2 种数据形式的来源。1.2 画弦图前的软件准备别等到画的时候才发现缺东西用 Origin 画弦图第一步不是输入数据而是确认你的软件能不能调出弦图入口。早期版本的 Origin 默认绘图菜单里并没有 Chord 这种模板需要到 App Center 里搜“Chord”或“Circos”下载插件。OriginPro 2021 之后的版本在绘图菜单的分类中基本已经内置了圆形/弦图相关的入口但中文版和英文版的菜单位置有差异用的时候别死记路径直接看图类型列表里有没有“Chord弦图”。我个人的习惯是论文开始前就先建一个空白项目把要用的模板、插件都确认好省得数据整理完才发现画不了临时抱佛脚。另外建议一开始用英文或拼音作为数据列标题比如 Source、Target、Weight画完图再统一改成中文标签这样能避开不少字体兼容问题。2. 数据形式一矩阵型数据成对关系最直观的写法第一种数据形式是矩阵也是很多人拿到数据后天然会想到的排列方式。行和列放同一组对象行名或列名就是节点的名字交叉单元格里放这两个对象之间的统计值。比如你做 4 个物种之间的互作强度Excel 表就可以长成这样物种物种A物种B物种C物种D物种A01283物种B12057物种C85010物种D37100这张表有两个特征需要留意。第一行和列的排序顺序一致这样才是一个规范的对称矩阵第二对角线通常填 0 或者留空因为大多数情况下你不会研究“自己和自己的关系”。如果对角线上的数值有实际意义比如自我反馈强度那也可以保留但要提前想清楚这张弦图要不要显示自环否则画出来会平白多出好几条让人困惑的细线。2.1 矩阵型数据在 Origin 里的准备流程在 Origin 里录入矩阵型数据最省事的办法是直接在空白工作簿里按行列粘贴。第 1 行放节点名第 1 列也放节点名其余部分放数值。这里有个容易被忽略的细节首行和首列如果被当成普通数据绘图时就识别不了节点名。所以录入后要检查列属性。操作并不复杂选中数值区域后右键选择“Set As”把第一列类别明确为“Text/文本”或者直接把列头标签改成文本属性。做过这一步后再全选整个区域到绘图菜单里找到弦图模板Origin 会自动把行列标签映射到圆环节点上交叉数值映射为弦的宽度。如果你的 Origin 版本提示弦图只支持“矩阵窗口”而不支持工作表那就需要把工作簿转换为矩阵。方法是在工作簿名称上右键找到“转换为矩阵/Convert to Matrix”将当前工作表数据放进矩阵窗口。转换之前记得确认行标签和列标签都完好否则成了纯数字矩阵节点名就丢了。2.2 矩阵型格式的适用场景和限制矩阵格式最大的好处是直观Excel 里手工编辑方便同行列对齐也不需要额外写脚本。但它有一个天然短板如果数据是稀疏的比如你有 50 个节点但真正存在关系的组合只有几十对那么矩阵里绝大多数单元格是零。零太多弦图会显得很空而且 Origin 在读取时还要额外处理一堆无意义格子性能会受影响。我通常建议节点数少于 20 个、缺失值不多、且关系网络比较密集时用矩阵格式最合适。规模一旦变大或者矩阵里有大量空白时就果断换用下一种形式——边表。3. 数据形式二三列边表稀疏大网络的最优解第二种数据形式是三列边表专业一点叫 edge list。它不用方阵来摆数据而是每一行只记录一条关系第一列是源节点第二列是目标节点第三列是权重或流量。同样拿上面的物种互作举例边表就可以写成SourceTargetWeight物种A物种B12物种A物种C8物种A物种D3物种B物种C5物种B物种D7物种C物种D10可以看到这个表格比矩阵紧凑很多。矩阵里需要 4×416 个格子边表只需要 6 行就描述了所有关系。节点数越多、网络越稀疏边表的优势越明显。更重要的是边表天然支持有向关系。比如 A 到 B 是 12B 到 A 是 0这种非对称情况在矩阵里也能表达但人眼读起来不直观边表里每行独立方向就是行顺序。3.1 从 Excel/文本导入并正确出图边表数据在 Origin 里准备很简单新建工作簿把三列粘贴进去然后手动设置前两列为文本格式。这一步特别关键因为默认导入的列可能会被 Origin 识别成数值型导致节点名丢失画出来的弦图自然就不对。设置完成后按住 Ctrl 键依次点击源、目标、权重三列选中后进入绘图菜单找弦图入口。Origin 会自动把前两列的内容当作节点分组第三列当作连接强度。如果你的版本里弦图入口需要的是矩阵而不是边表也不必担心Origin 提供了工作簿转矩阵功能可以先让 Origin 或你自己把边表聚合成矩阵再画图。3.2 快速把矩阵转换成边表的实操小技巧很多人的原始数据其实是从矩阵开始积累的但真正画弦图又需要边表格式。两三百个节点的矩阵手工一行行拆显然不现实。最简单的办法是借助一个小脚本用 Python 的 pandas 几秒钟就完成转换。我平时用的模板长这样import pandas as pd # 读取矩阵index_col0 表示第一列是行名 df pd.read_excel(matrix.xlsx, index_col0) # 把矩阵堆叠成三列源、目标、权重 edge df.stack().rename_axis([source, target]).reset_index(nameweight) # 去掉权重为 0 的行保留有效边按权重降序排列 edge edge[edge[weight] ! 0].sort_values(weight, ascendingFalse) # 导出成边表Origin 直接导入即可 edge.to_csv(edge_list.csv, indexFalse)这段脚本里stack()会把每一行每一列的交叉值变成一条记录rename_axis把原来的行名和列名变成 source 和 target最后一列 weight 就是权重。跑完后生成的 edge_list.csv直接拖进 Origin 就能用。如果矩阵特别大我还会顺手把零值行删掉这一步在上面已经写进去了别省略。3.3 边表格式的常见误区边表格式看着简单用起来却有几个容易踩的坑。一是重复记录相同源—目标对。比如从多个子表合并数据时同一个“A→B”出现了好几行需要先按源和目标分组求和否则弦图会画出一大堆细到不可见的线。二是忘记设置文本格式。我见过不少新手直接把 CSV 拖进 Origin 就开始找绘图按钮结果节点名全被当成了数字图出来只有孤零零的圆环。这类问题排查起来很容易看列头旁边的数据类型图标是“文本”而不是“数值”就行。三是误以为必须提供所有节点的成对边。边表的好处本来就是“只记录有关系的组合”没有出现的组合在弦图里就是没有弦不需要额外补零这一点和矩阵完全不同。三列边表最大的意义是把数据结构从二维的方阵解放成了任意长度的记录表你甚至可以把它理解为“关系数据的数据库形式”后续做筛选、合并、统计都非常顺手。4. 数据形式三分组/多组数据对比多套关系结构的利器第三种数据形式容易被忽略但在真实科研场景里很常见你不只想画一张弦图而是想同时对比几个时间点、几种处理、或者几组不同条件下的关系。这时候数据就不能只靠“源—目标—权重”三列解决了必须再加一个分组列变成四列GroupSourceTargetWeight2019华东华南1202019华南华北902020华东华南1602020华北华南75这种带 Group 列的数据格式本质上是在三列边表外面包了一层分类信息。Group 可以是年份、温度梯度、实验处理、不同采样点等它的作用是把整个数据切分成若干个独立的子网络。画弦图时既可以把不同 Group 用不同颜色叠加在同一个圆环里做整体对比也可以拆成多张小图并排展示做分面比较。4.1 分组数据在 Origin 里怎么组织Origin 对分组数据的处理方式比较灵活。最简单粗暴的方法是利用数据筛选功能把每个 Group 单独筛出来分别绘图再用 Origin 的“合并窗口”把多张图拼到同一个页面上。这样做的好处是每张图都是完整的独立对象参数可以单独调整缺点是要重复点击好几次绘图流程。如果希望一步到位则可以用绘图设置里的分组映射功能。把 Group 列作为分组列Origin 会自动根据 Group 值拆成多个图层或者用不同颜色区分不同组。这种方式适合不要求独立坐标轴、想保留统一图例的场景。不过我必须提醒一句弦图和普通点线图不一样它本身就很容易视觉过载如果 Group 数量超过 3 到 4 个叠加在同一张图里就会非常拥挤。这时候宁可让每张图保持独立也别把六七个组的弦硬塞进一圈。4.2 什么时候必须用分组形式分组形式最典型的场景是时间演变分析。比如你关注的是一个贸易网络中各个节点的重要性如何逐年变化用矩阵三年各自画三张图读图的人还要来回对比用分组边表整理后可以按年份做成三个并列子图读者自然就会注意到未来年份里某条弦变粗了、某个节点弧长变长了。另一种场景是多处理对比。比如研究不同养分条件下微生物互作网络的变化每处理一个组放在同一画布里对比审稿人对“处理的系统性影响”会留下非常直观的印象。数据组织上也只需要在矩阵或边表后面加一列 Group不需要为每个处理单独维护一个文件。4.3 分组数据的整理注意事项整理分组数据时最容易出现的隐患是组与组之间的节点集合不一致。比如 2019 年有 5 个城市参与贸易2020 年却少了 1 个城市或者新加入 1 个节点。弦图在绘制时会自动为新节点分配位置但两图对比时节点位置可能对不齐读者会误以为图结构发生了突变。建议在整理分组数据时先统计所有组里出现过的节点全集再统一补全每个组的节点列表缺失的权重填 0这样三张图圆环上的节点顺序才能保持一致。5. 完整出图流程与参数调整从数据表到期刊级弦图讲完三种数据形式我再把从打开 Origin 到导出成图的完整流程串一遍。无论你选了矩阵型、边表还是分组数据下面的步骤基本通用。5.1 从空白工作簿到弦图成品的六大步骤第一步建工作簿。打开 Origin 后新建一个 Workbook简体中文版一般叫工作簿英文版叫 Book。第二步录入或导入数据。可以直接从 Excel 里复制粘贴也可以使用 File 菜单里的 Import 导入 CSV/TXT/Excel 文件。边表形式一定检查前三列的类型矩阵形式检查首行首列是否为文本节点名。第三步全选数据区域。矩阵形式就选整个含行列标签的矩形区域边表形式就选中源、目标、权重三个列分组形式则额外把 Group 列也选中。第四步打开绘图菜单。在绘图菜单里找到 Chord/Circos 弦图入口或者通过 App Center 调用已安装的模板。如果菜单实在找不到可以先用矩阵窗口作为作图数据源。第五步等待 Origin 生成图形。刚生成的弦图往往很粗糙节点标签挤在一起颜色也是默认的渐变色别急着导出进入下一步调整。第六步双击图形打开 Plot Details 属性窗口。在这里调节几乎所有细节包括节点弧长颜色、弦的颜色映射、线宽、标签字体和显示方式。5.2 把弦图调出“期刊质感”的几个关键参数弦图最影响观感的参数有三个颜色、线宽和标签。颜色设置建议分两级。第一级给圆环上的节点分段设置颜色这个颜色代表了“组的归属”可以用 Origin 的颜色映射把源节点对应的色块映射成组色第二级是弦的颜色一般建议跟随源节点或者目标节点这样读图时能顺着弦一眼找到是从哪边延伸过来的。线宽对应关系强度但这里有个容易踩的坑如果权重数值跨度很大比如最小的边只有 1最大的边有 1000按原始数值映射后小边会细到看不见。这时候最好对权重做对数变换或者开方变换后再映射。如果不想改变表格数据也可以在 Plot Details 的“Line Width”属性里把尺寸设置改成一个非线性表达式或者给数据加一个比例因子。标签设置的核心是“少而清楚”。节点多的时候标签字号建议降到 8pt 到 10pt同时打开标签防重叠功能。要是节点实在太多就适当提高阈值把权重太小的关系从图里隐藏只保留能反映主体结构的边等图讲清楚大趋势后再在论文里用文字补充被过滤掉的小量关系。5.3 导出设置别让前面的功夫白费出图前记得根据目标期刊要求设置画布尺寸。一般来说单栏图宽度建议 8.5 cm 左右双栏图 17 cm 左右。矢量格式优先选择 EMF、EPS 或 PDF 中的一种在 Origin 里通过 File → Export Graphs 导出勾选“矢量图形”选项勾掉自动压缩。位图格式则用于一些线上系统强制要求的场合此时把 DPI 设置为 300 或 600清晰度才够。我见过很多人辛辛苦苦画好弦图导出时选了默认的 72 DPI 位图放进 Word 一放大全是马赛克最后只能重画。这类问题一旦发生非常浪费时间建议每次导出前把常用配置做成模板一劳永逸。6. 常见问题与排查技巧实录这一部分我专门把实操过程中同行问得最多、以及我自己踩过的坑整理成速查表。每一条背后都是真实场景不是空泛的“请检查配置”。问题现象常见原因处理思路绘图菜单里找不到弦图入口Origin 版本较旧或者没有安装相关插件更新到 OriginPro 2021 之后版本或到 App Center 搜索 Chord/Circos 模板安装出图后只有圆环、没有弦矩阵值几乎都是 0或者边表没被识别确认节点列是文本型检查数据区域是否包含了首行首列并确认存在非零权重大量标签重叠看不清节点数太多或字号太大缩小标签字号开启重叠避开功能用阈值隐藏次要权重边中文节点名乱码字体不支持中文字符在 Plot Details 中设置支持中文的字体如宋体/雅黑也可先用英文画完再改名弦的粗细和数值不成比例权重跨度太大小值被压没对权重做 log 或 sqrt 变换或在线宽设置中用非线性映射分组数据分面对比时节点位置对不齐各组节点集合不一致统计全部节点后为每个组补全节点列表缺失值填 0导入 CSV 后列类型变成数值Origin 默认把全数值列判定为 Y 列右键列头设置列为 Text 类型并关闭“自动识别类型”选项导出的图发到 Word 里变模糊用了位图且 DPI 不足改用 EMF 矢量导出或设置 DPI 为 300 以上除了表里的内容还有几条经验我想重点说一下。第一别把弦图当成万能图。如果你的数据里没有明显的总量差异和结构差异画出来就是一团均匀的蜘蛛网反而会让读者困惑。画之前先问自己一句我要突出的是哪些关系如果答案不清晰弦图只会放大这种不清晰。第二数据整理的时间应该占总时间的七成以上。Origin 出图本身只要几分钟难的是把数据从 Excel 的各种奇形怪状中整理成统一、干净、没有重复计数的标准格式。我一般会先建一个“数据字典”页专门记录每一列的含义、单位、来源防止隔几天回去更新数据时忘记当初的字段设置。第三版本差异会导致同一个操作在不同电脑上表现不同。同样一份三列边表在同事电脑上直接出图在我这里却要先转换为矩阵。这通常和 Origin 的模板设置和插件状态有关遇到时先别怀疑数据直接检查“菜单入口是否存在”和“数据类型是否合规”两个问题。我自己现在做弦图几乎固定成了一个工作流原始数据永远保留一份矩阵或边表作为底稿处理过程用脚本记录最终画图前再根据论文要讲的故事决定用哪种数据形式呈现。如果你也准备开始用 Origin 画弦图建议先花点时间想清楚一个问题你到底是想展示“关系强度结构”还是想展示“流量方向的演变”想明白了这一点3 种数据形式里选哪个答案自然就出来了。