
网络图这玩意儿听起来挺高大上其实就是一堆点节点和连接它们的线边。我最早接触是在做通信网络仿真的时候导师丢给我一张拓扑图让我分析节点连通性。我当时就在想这种图要画得清楚、画得能给论文用什么样的工具最靠谱有人可能会说用Python的networkx或者Gephi再不行用Visio硬画。这些我后来都折腾过各有各的坑。Python要写脚本改个样式还得查文档Gephi做社交网络分析很厉害但画工程类拓扑图总觉得界面太“学术”线条也不够干净Visio手动画倒是快但数据一变图就得重画一点都不“自动化”。后来在Origin里意外发现它自带的绘图功能完全能胜任网络图的绘制而且跟论文出图的风格高度统一不用再来回切换软件。这篇文章我想用一种“手把手带着走”的方式来写不光是告诉你点哪个按钮还会把每一步背后的逻辑讲清楚比如为什么数据要这样排、为什么线宽要这么处理。如果你也想在Origin里画出一张漂亮的网络拓扑图、关系图或者路径图那你来对地方了这篇文章可以帮你省下不少摸索的时间。1. 先弄清楚网络图的本质节点和边才是主角在打开Origin之前先花一分钟把网络图的结构在脑子里理清楚。不管你的应用场景是社交网络、通信链路还是流程依赖一张网络图说白了就只有两种基本元素节点Node表示实体比如路由器、交换机、人或者一个变量。边Edge表示关系比如两台设备之间的网线连接或者两个人之间的朋友关系。理解了这两点Origin里的作图逻辑就清晰了节点就是散点图中的点边就是连接这些点的线段。这么一想很多操作就顺了。1.1 为什么用Origin画网络图而不是其他专业软件Origin在科研绘图领域的地位不用多说绝大多数理工科学生对它的印象是“处理实验数据、画XY散点图、柱状图、拟合曲线”。但实际上它的散点图线段图组合起来完全能够覆盖网络图的绘制需求。拿我之前画过的一张企业园区网络拓扑图来说节点大概30多个链路40多条。规模不大但涉及不同类型的设备核心交换机、接入交换机、服务器、防火墙还需要区分不同链路的带宽等级。用Gephi也能做但Gephi导出的矢量图在某些期刊的排版环境里格式兼容性很微妙经常需要调整边框和字体。在Origin里画出图风格跟论文里其他图表保持一致字体的选择、坐标轴样式、线型粗细全都在同一个环境里控制省事不少。1.2 网络图的类别差异无向图、有向图在Origin里怎么区分这里顺手提一嘴有向图和无向图的区别因为后面操作步骤里会涉及。无向图A连到BB连到A线没有箭头。比如局域网里两个交换机之间的链路通常画成无向边。有向图A指向B有箭头方向。比如数据流向、依赖关系通常用带箭头的线表示。在Origin里画这两种图的区别只在于是否启用箭头端点。如果画的是有向图只需要在线的属性设置里勾选“End Point”选择箭头样式即可。这个细节后面我会具体演示。2. 数据整理方式网络图作图前需要完成的3种数据结构这是整个教程里最容易卡住人的环节也是决定最终图能不能画成功的关键。不少人在Origin里画网络图失败原因不在绘图操作而是数据表结构摆错了。Origin的数据表结构比较“扁平”它不像Gephi那样有专门的“节点表”和“边表”概念所以我们需要把节点坐标和连接关系都摊开整理成Origin认识的格式。2.1 方案一节点坐标表 连接关系表最通用这是我个人强烈推荐的方式它不仅直观而且非常方便以后调整节点位置。你需要在Origin数据表里准备三个工作表可以放在同一个Workbook里用不同Sheet区分Sheet1: Nodes节点坐标表XYLabel00SwitchA21SwitchB13Server1.........这表示节点SwitchA放在坐标(0, 0)的位置SwitchB放在(2, 1)的位置Label列的数值最终显示为节点旁边标注的名字。Sheet2: Edges连接关系表StartEndSwitchASwitchBSwitchAServer1SwitchBServer1这个表告诉Origin要从SwitchA这个节点连一条线到SwitchB。在作图时先画Sheet1的散点再在同一个图层里添加一条线图Line Plot用Sheet2的数据去连接。关键是如何让Origin知道“Start”和“End”对应到具体的X、Y坐标——这就需要用列属性来设置我在第3章详细演示。2.2 方案二长表格格式适合大规模自动布局如果你的节点数量非常多比如50个以上手动设定坐标会累死。这时候可以把坐标的计算交给Excel或Python用代码生成每个节点的坐标然后复制进Origin即可。比如你可以用Python的networkx库先计算好节点位置比如spring_layout导出成X、Y坐标列表之后复制到Origin的Sheet1里。Origin只负责最终渲染布局计算交给更专业的库来做全是文本纯手动。2.3 方案三纯邻接矩阵需要额外转换还有的人习惯用邻接矩阵来记录连接关系比如ABCA011B100C100这种格式在学术论文的附录里很常见但不能直接导入Origin用于画网络图。如果手头数据是这种格式建议先用Python或Excel公式将其转换成长表格/边表格式转换逻辑很简单逐行扫描矩阵凡是值为1或者不为0的单元格就生成一条从行名到列名的边记录。3. Origin里从零开始的详细画图步骤我实际跑过一遍这是本文的重头戏。我会按照我在实际项目里的操作顺序一步步带着你完成一张带节点名称、连线和不同线宽的典型网络图。这里我以Origin 2021版界面为例中文版操作路径基本一致老版本稍微找一下对应的菜单就行。3.1 建立节点坐标表打开Origin新建工作簿。把Sheet1改名为“Nodes”然后按下表输入数据。注意X和Y是节点坐标Label是节点的显示名称。坐标值代表什么意思想象你在Origin的绘图坐标系里铺开一张虚拟画布画布左下角是(0,0)所有的节点就是这张画布上的点。你要做的就是把每个节点的位置安排清楚。为了演示我用一个5节点的简单拓扑XYLabel00PC121SwitchA40PC223Server124R1选中这三列点击菜单栏的“绘图”——“基础2D图”——“散点图”。这时候你会看到5个孤零零的点出现在Graph窗口里很正常别慌。这些点就是网络图中的“节点”。3.2 在表格里准备“边”的坐标数据这是整个教程的核心也是很多人绕不过去的坎。你可能会想我直接在Graph窗口里把点连起来不就行了吗可以但如果节点有几十个、上百个手动连线会让你崩溃而且后期调整任一个节点位置时所有手动画的线都会错位。正确的做法是让“线”也成为数据的一部分。我们需要构造一个包含连线端点的坐标表。方法如下新建一个Sheet命名为“Edges”。假设我有这样几条连接关系连接从PC1到SwitchASwitchA到PC2SwitchA到Server1Server1到R1。那么Edges表需要这样列X1Y1X2Y20021214021232324这里的每一行代表一条边X1、Y1是起始节点的坐标X2、Y2是终止节点的坐标。我之所以不写节点名是因为Origin在绘制连线时是不认识节点名的它只能识别坐标。所以这里需要手动把“节点名”和“坐标”对应起来这是我的笨办法但却是最可靠的。3.3 添加边的图层现在回到Graph窗口。右键点击图层左上角的“1”图标也就是图层管理器选择“图层内容”。在弹出的窗口里将Edges表中的X1、Y1、X2、Y2作为新的数据轴添加进去。具体来说在图层内容对话框的左侧数据列表中展开“Edges”工作簿找到X1、Y1、X2、Y2。先选中X2、Y2再按住Ctrl选中X1、Y1然后点击向右的蓝色箭头把它们添加到右侧绘图列表。关闭对话框。这个时候你可能发现图还是没变化或者线是乱七八糟的。不要急还有一个关键设置在图层的绘图列表中那条代表边的数据系列默认可能是以“散点图”方式绘制的。右键打开“绘图细节”对话框在“线条”选项卡里勾选“连接线”把“样式”设置为“直线”线宽可以你自己定。这样坐标点之间才会以直线连接形成网络的边。之所以X1、Y1和X2、Y2要放在同一行是因为Origin的线图默认每行就是一条曲线的起点和终点。3.4 边的粗细、颜色如何反映链路带宽到了这个阶段基础网络图已经出来了。但如果所有边都一样粗、一样颜色图虽然能看但信息密度太低。大多数实际场景里两个节点之间的链路往往有不同的带宽或不同的重要程度。在工程报告里我们通常会希望主干的链路画粗一点普通接入链路细一点。Origin里没有直接提供“根据一条单独列的值自动映射线宽”的功能这里就需要用一点小技巧为不同粗细的边分别建立数据系列。举例来说假设PC1到SwitchA的链路是千兆主干需要画成粗线SwitchA到PC2的链路是百兆接入画成细线。那么刚才的Edges表可以拆成两个表或者一个表里分两段Edges_Backbone主干链路表X1、Y1、X2、Y2全部放千兆链路的数据Edges_Access接入链路表放百兆链路的数据然后在图层里对这两组数据分别添加线图给主干链路线宽设置为3接入链路线宽设置为1。这样一眼就能看出网络结构中哪些链路是核心哪些是边缘看图的效率完全不一样。这个技巧也可以扩展到颜色上比如把光纤链路用一种颜色铜缆链路用另一种颜色。方法完全一样就是拆数据系列。3.5 添加节点标签让每个点有名字节点画出来了但都长得一样分不清谁是谁。这时候用Label列的数值来标注节点。右键点击图上的任意点打开“绘图细节”然后在“标签”选项卡里勾选“启用”在“标签形式”下拉框里选择“列”——选中“Label”列。字体大小一般设置为12或者14黑体、宋体、Times New Roman都行看你要投的期刊要求。标签设置好后就可以看到每个点旁边出现了PC1、SwitchA这样的文字。如果位置有重叠可以在“标签”选项卡里调整偏移量或者直接手动拖动标签框。3.6 保存模板避免下次重新配置画网络图的整个流程最耗时的是数据整理和图层配置一旦配好如果下次还要画类似的图建议把当前Graph保存为模板。操作方法选中当前Graph窗口点击菜单“文件”——“保存模板为”给它取个名字比如“NetworkTopoTemplate.otpu”。下次要画新网络时只要把新的节点坐标表和边表数据填好然后调用这个模板图层设置、线型、标签样式、坐标轴格式统统自动套用只需要改动数据内容5分钟就能出一张新图效率提升非常明显。4. 网络图的颜值提升与可读性优化图不仅仅是“画出来”还要“看得懂”。我在实际做项目的过程里总结了一些提高网络图可读性的方法效果显著下面挑几种最实用的讲。4.1 箭头方向怎么加区分流量和数据走向回到第1章提过的有向图。如果你画的网络图需要展示数据流向比如数据库主从复制、请求调用链路边就要带上方向。选中那条边打开“绘图细节”——“线条”选项卡在“箭头”相关设置中找到“结束点”End Point选择“箭头”调整箭头大小。这么一弄图上的每条边就有了指向性。4.2 颜色分组按设备类型着色节点可以按功能类型着色。例如路由器/交换机蓝色服务器绿色终端PC灰色这个操作同样在“绘图细节”——“符号”——“填充颜色”里完成。如果节点数量少直接手动改如果节点数量多建议在数据表里加一个“Color”列填上颜色名或数值然后在“填充颜色”选项中选择“按列”——选中这个“Color”列颜色就自动映射了。4.3 节点模糊和坐标轴隐藏的细节处理网络图和普通学术图看起来不一样的地方在于它通常不需要显示坐标轴和刻度线。默认绘制的散点图是会显示X轴、Y轴以及刻度文字的画网络图时强烈建议把这些都隐藏掉。操作双击X坐标轴打开坐标轴对话框为什么Origin画网络图要处理“点与线”的图层优先级其实很多新手不知道。如果你在添加边之前先选中所有点然后直接作图由于线和点是同一个图层里的不同数据系列绘图顺序不好控制时边可能会被节点盖住或者节点被边盖住。Origin 2021之后的版本支持“数据绘制顺序”调整右键点击Graph窗口空白处选择“绘图顺序”把节点系列置顶、线条系列置底这样节点符号就不会被线穿过去遮挡。4.4 布局思路手调与算法结合避免线交叉整个网络图最直观的美观度指标就是边的交叉数。交叉越少图越清晰。Origin本身没有布局算法所以需要自己想办法。我的经验是先用简单的圆形布局打底把所有节点均匀放在一个圆周上这样大多数长链路之间的关系会比较清晰然后再手动微调。具体做法是如果节点数为n每个节点的角度是360/n度的整数倍坐标按照cos、sin来计算。这个可以用Excel快速生成坐标。如果节点数据特别多我建议还是先用Python的networkx库算好spring_layout或circular_layout导出坐标后粘贴到Origin里。这不是绕道而是把最适合的工具用在最合适的环节。其实这引出一个问题同类的几款做图工具我简单对比一下你能更清楚自己该用哪个。工具优点缺点适用场景Origin出图风格统一后期修改方便与数据表联动强自身无布局算法手动布局工作量大小规模10~50节点、工程报告与论文插图Python networkx matplotlib布局算法丰富大规模处理能力强需要编程样式调整麻烦节点超多100、复杂网络分析Gephi交互式可视化社区检测、度分布等分析一键出图导出到论文时格式常需重调社交网络、文本共现关系分析Visio纯手工绘制控件丰富数据驱动能力差改数据就得重画快速话术示意图、现场简易拓扑从这个对比能看出Origin更适合数据已然结构化、且对成品格式有较高要求的场景。你要是只需要一张示意图Visio就够了但你要是需要根据实时数据不断调整图那Origin才是正路。5. Origin绘制网络图时的高频问题与排查思路画网络图的过程中你会遇到各种奇怪的问题。这些问题的根因大多隐藏在数据格式和列属性里下面是我在实际使用中踩过的坑以及对应的排查和解决方案。5.1 节点数据与连线数据不在同一坐标系中导致线飘到天边场景描述节点画出来了但一添加边线不知道跑哪去了或者线全都纠结在图的角落。原因分析Origin在绘图时如果不同数据系列的X、Y列范围差异过大会自动调整坐标范围。例如节点的X范围在0~4Y范围0~4但Edges表里如果误填了坐标为10、20或者错把节点名当数字填进去图的范围就会瞬间被拉伸到很大看起来点就缩成了角落里的小块。排查方法双击坐标轴检查X轴和Y轴的实际范围。如果范围异常先改回节点坐标的范围然后仔细检查Edges表的坐标数值逐行对比起始和终止坐标与节点表的对应关系。5.2 新画的线段全部堆在原点是列指定不完整场景描述添加边图层时线全都从(0,0)出发或全部重叠在一起。原因分析Origin的线图默认把工作表里第一列作为X第二列作为Y。如果你的Edges表列顺序是X1、Y1、X2、Y2在添加绘图数据时没指定好“X2, Y2”列作为终点坐标或者只拖入了X1, Y1那么这些点会被当作一条曲线的连续点在图上绘制成一条没有实际意义的折线看起来就像所有线段混在一起。排查方法在图层内容窗口中确认边数据的绘图设置。尤其是在“绘图细节”里检查每个边缘数据系列“X”和“Y”关联的是否正确。正确情况应该是起始点和终止点各作为一条直线段的端点由两个数据点组成一条独立的线。5.3 打开文件时显示没有窗口或图形丢失场景描述保存的Origin文件.opju再次打开时明明表格里还有数据但Graph窗口不见了。原因分析这个情况在多个Origin版本中出现并在搜索热词中也有体现。多数是因为Graph窗口未被锁定为“显示图纸窗口”或者工作簿关联异常。部分情况下是因为上次关闭时没有正常退出导致Graph窗口没有被持久化到工作簿中。排查方法打开文件后在左侧“项目资源管理器”Project Explorer中看是否有名为“Graph1”或自定义名称的条目。如果有但没显示出来双击即可。如果压根没有那就只能在数据表里重新绘图所以养成随手保存模板的习惯非常关键。另外有几个在搜索热词里出现的高频问题值得一并解决Origin出现demo水印这个问题通常出现在使用未正确激活的安装包时。解决办法是检查许可证文件是否放置到安装目录的指定位置并确保以管理员身份运行重新激活后水印会消失。图例横向排列双击图例打开“图例”属性窗口在“布局”选项卡里修改方向选择“水平”排列即可。这个在新版Origin里做的很方便。如何让两条线分别对应于两个Y轴这在双Y轴图中常用。方法是先在数据表中准备一个X列和两个Y列选中数据后点击“绘图”——“多面板/多轴”——“双Y轴”即可。如何设置小数点位数在坐标轴的“刻度线标签”选项卡里设置“小数位数”为你需要的位数即可图表中的所有数字都会统一修改。Origin修改默认字体“工具”——“选项”——“文本字体”中修改最好一次性把终点文本字体也改了不然每次新建图都得重新设置一遍。5.4 节点标签显示不全或被截断场景描述节点的标签名称比较长比如“Core-Switch-01”在图上显示时被截断或者显示不全。解决办法在“绘图细节”——“标签”选项卡里把“自动调整大小”取消勾选手动增加标签框的宽度或者把标签字体稍微调小一点这样相对图面就不会显得拥挤。如果标签文字实在太多还有一个处理技巧给Label列设置成两行文字比如在Excel里用“核心交换机\n01”这样的换行符Origin会识别并把标签显示成两行。这个技巧在画复杂拓扑图时很实用。6. 一个完整实例从Excel数据到Origin成品图的全流程前面讲了很多理论这里用一个端到端的实例来收尾。假设我们有一个小型教学实验网络的拓扑数据需要通过Origin画出来并用于实验报告。节点一共6个一个核心交换机Core-SW、两个接入交换机ACC-SW1、ACC-SW2、两台PC、一台服务器。连接关系如下Core-SW 与 ACC-SW1 相连Core-SW 与 ACC-SW2 相连Core-SW 与 Server 相连ACC-SW1 与 PC1 相连ACC-SW2 与 PC2 相连主干链路需要加粗表示。第一步在Excel或Origin表里整理好坐标。我习惯把这些节点按照层次结构布置核心交换机在中间接入交换机在左右两翼PC在下方服务器在上方。坐标如下LabelXYCore-SW33ACC-SW112ACC-SW252PC110PC250Server35第二步整理边表。主干链路Core-SW到ACC-SW1和ACC-SW2、Core-SW到Server放一个Part接入链路ACC-SW1到PC1ACC-SW2到PC2放另一个Part分别存储便于设置不同粗细。第三部在Origin里按第3章的步骤添加散点图、标签、边图层。作图之后就会得到一张带层次感的实验网络拓扑图。这时候如果你切换一下主题比如换成打印出版风格图片立刻就是可以直接贴进实验报告的标准格式。第四步导出图片。右键点击图形窗口选择“导出图形”格式建议选“TIFF”或“EMF”。期刊投稿用TIFFWord文档用EMF矢量图可以保证清晰度。分辨率设300 dpi或以上。这整套流程从数据准备到导出成品图我实际用时控制在大约15分钟。当然前提是已经保存好模板第二次以后基本就是改数据和坐标。7. 实操中容易忽略的几个细节设置最后这部分想集中谈一下实操中“知道但容易忘”的设置。这些都是我在无数次出图之后才沉淀下来的经验。7.1 连接线的端点和拐角样式网络图的线条有时需要区分链路类型比如虚线代表无线链路实线代表有线链路。在“线条”选项卡里设置“样式”即可。还有一个小细节线条的“连接”方式如果选择“曲线”会带有一定的曲率看起来更柔和选择“直线”则更符合工程绘图的规范。7.2 节点符号内部颜色和边框可以分开控制Origin的散点图节点符号可以设置填充色和边框色。这很实用比如填充色表示设备类型边框色表示设备状态红色边框表示告警、绿色表示正常信息一下就丰富了很多。7.3 工作簿的列属性设置我给新接触Origin的读者一个最重要的建议画图之前一定先选中列右键设置列属性为“X”或“Y”。尤其是当你的工作簿里有多组数据时如果不明确指定列属性Origin经常会把第一列默认为X其他都当成Y导致画出来的图一个轴不对。网络图这种需要多数据系列叠加的场景很容易出现这个问题。7.4 不要忽视坐标轴的长宽比这个问题在网络上几乎没人提到但我认为它很重要。网络图不像函数图那样强调坐标的真实比例但如果横纵坐标轴的刻度单位不一样比如X轴0~6、Y轴0~3节点之间的距离就会被压缩导致视觉上连线角度扭曲。建议双击坐标轴把坐标轴的显示范围手动锁定成“应用相同的比例”或直接调整纵横比例使图看起来比较协调。让我用数字举个例子我上面实例中节点X坐标范围是1~5Y范围是0~5。如果默认坐标轴范围刚好是这样那矩形画布会压扁这个图。你可以通过双击坐标轴在“刻度”选项卡里把“水平”和“垂直”的单位长度比例调成一致图看起来就舒服多了。7.5 对模板的二次修改设置默认线宽和字体如果多次使用自己的模板建议花点时间把线宽、字体、图例格式统一改成自己常用的格式然后再次保存模板。这样每次作图、导出出图风格不会有变化尤其是同一篇论文里的多张网络图风格统一会非常加分。我在最开始接触网络图时也走了不少弯路最开始的图节点坐标乱得一塌糊涂连线更是惨不忍睹。后来总结出来这套方法才发现网络图在Origin里的本质仍然是数据可视化——关键不是软件功能不够而是数据组织形式对不对。只要把节点坐标和边的关系表整理清楚剩下的工作就是把表格变成图形再按需调整细节。希望这篇文章能让你少走一些弯路直接画出自己满意的网络图。