当前位置:首页 > AI技术 > 正文内容

网络图怎么画 NetworkX库绘制节点与关系拓扑图|Duuu笔记

admin1周前 (04-09)AI技术25

基于真实项目经验的Python实战分享

不是必须但几乎总是需要导入 matplotlib.pyplot 并调用 plt.show();nx.draw_networkx() 更常用且省心,适合教学调试;中文显示需配置 font.sans-serif;布局算法如 spring_layout 适用于小图。

NetworkX 画图前必须调用

matplotlib.pyplot

吗?

不是必须,但几乎总是需要——因为

networkx.draw()

本身不显示图像,只调用 Matplotlib 的底层绘图逻辑。不导入

matplotlib.pyplot

或不调用

plt.show()

,你会看到“没报错但没图”的静默失败。

常见错误现象:

RuntimeWarning: No artists with labels found to put in legend.

或直接无输出;Jupyter 中单元格执行完一片空白。

必须显式导入:

import matplotlib.pyplot as plt

绘图后必须加

plt.show()

(脚本中)或依赖 Jupyter 自动渲染(但建议仍写上,避免跨环境失效)

若用

plt.figure(figsize=(8,6))

提前设画布,记得在

draw()

前调用,否则可能被忽略

nx.draw()

nx.draw_networkx()

选哪个?

nx.draw_networkx()

是更常用、更省心的封装,它默认启用节点标签、边权重提示、交互友好布局;而

nx.draw()

更底层,适合批量出图或嵌入 GUI,但默认不画节点名、不自动适配字体大小。

使用场景:快速验证拓扑结构、教学演示、调试关系连通性 → 优先用

nx.draw_networkx()

;生成高清 SVG 用于文档、或需精确控制每条边颜色/宽度 → 可切回

nx.draw()

配合参数逐项设置。

Python免费学习笔记(深入)

”;

nx.draw_networkx(G)

自动调用

nx.draw_networkx_nodes()

+

nx.draw_networkx_edges()

+

nx.draw_networkx_labels()

想关掉节点标签?传

with_labels=False

,别试图删

labels

参数——它不存在于

draw()

性能影响:二者底层一致,但

draw_networkx()

多一次字典遍历取 label,默认开销可忽略

中文节点名显示为方块?字体路径和

font_family

怎么设

Matplotlib 默认不支持中文字体,

nx.draw_networkx()

用的是

matplotlib.rcParams['font.family']

,不改就只能显示方块。

Action Figure AI

借助Action Figure AI的先进技术,瞬间将照片转化为定制动作人偶。

下载

关键不是装字体,而是让 Matplotlib “知道”系统里有可用中文字体。Windows 用户常误以为 SimHei 就行,其实得确认该字体文件真实存在且被 Matplotlib 缓存识别。

先运行

matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf')

看返回列表里有没有中文字体路径

临时生效:在绘图前加

plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'KaiTi']

(顺序重要,前面优先)

永久生效:修改

matplotlib.matplotlib_fname()

返回的

matplotlibrc

文件,设

font.sans-serif:

注意:Jupyter 中改 rcParams 后需重启内核才对后续 cell 生效

图太挤/节点重叠/边线缠绕——布局算法怎么选

NetworkX 不画图,只算坐标。

nx.spring_layout()

(默认)适合小图(nx.kamada_kawai_layout() 对称美观但计算慢;真正实用的是

nx.nx_agraph.graphviz_layout()

(需安装 Graphviz),它能导出清晰的层级/树状结构。

使用场景:社交网络小样本分析 →

spring_layout(k=1.5, iterations=50)

;组织架构图 →

graphviz_layout(G, prog='dot')

;电路拓扑或流程图 →

shell_layout()

分圈排布。

k

参数控制节点间斥力强度,值越大越分散(但太大反而飞散)

seed

必须设(如

seed=42

),否则每次运行坐标不同,不利于对比调试

兼容性坑:Graphviz 在 Windows 上要手动配环境变量

PATH

dot.exe

所在目录,Mac/Linux 用

brew install graphviz

apt install graphviz

最常被忽略的一点:NetworkX 本身不校验节点 ID 类型。如果你用字典键做节点名,又混入

None

或浮点数当 ID,某些 layout 函数(比如

planar_layout

)会直接抛

NetworkXException

,错误信息里却不会告诉你哪条数据有问题——得自己先

assert all(isinstance(n, (str, int)) for n in G.nodes())

相关文章

【深度学习】Java DL4J 2024年度技术总结

一、Java DL4J深度学习概述 1.1 DL4J框架简介 1.2 与其他深度学习框架的比较 1.3 DL4J 的优势 1.3.1 与 Java 生态系统的无...

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

一、Submarine(Hadoop生态系统) (一)Submarine 介绍 (三)Submarine 属于 Hadoop 生态系统 (四)Submarine 官网版...

神经网络中的单层神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 看一个经典的神经网络。这是一个包...

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

跨平台机器学习:ML.NET架构及应用编程

平台上的一个机器学习框架,它提供了一套丰富的算法和工具,使得开发人员可以轻松地构建和部署机器学习模型。支持多种编程语言,包括等,这使得它成为跨平台机器学习的理想选择。的架构主要包括三个部分:数据读取、...

一文讲清神经网络、BP神经网络、深度学习的关系

人工神经网络中的顶级代表。往往说《神经网络》就是指《BP神经网络》。 大家研究着各种神经网络,研究得不亦乐乎, 来了两个家伙Romelhart 和Mcclelland,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。