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

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

admin2个月前 (03-31)AI技术53

不是必须但几乎总是需要导入 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())

相关文章

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

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

【DL】2023年你应该知道的 10 大深度学习算法

3. 循环神经网络 (RNN) 4. 生成对抗网络 (GAN) 5. 径向基函数网络 (RBFN) 6. 多层感知器 (MLP) 7. 自组织图 (SOM)...

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

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

什么是人工智能 ?

您可以使用 ML 训练 AI,使其精确、快速地执行任务。这可以通过自动化员工感到吃力或厌烦的业务部分来提高运营效率。同样,您可以使用 AI 自动化来腾出员工资源,用于更复杂和更具创造性的工作。...

前端开发高级应用:MuleRun如何连接Slack通知 MuleRun消息推送集成配置步骤实战案例|Duuu笔记

若MuleRun无法向Slack推送通知,需依次配置Incoming Webhook或Bot Token、在MuleRun中设置对应通知目标参数,并通过最小化任务测试验证;常见失败原因包括凭据错误、权...

bp神经网络是什么网络,神经网络和bp神经网络

1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。 2、BP神经网络:是一种按照误差逆向传播...

发表评论

访客

看不清,换一张

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