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

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

admin7个月前 (04-09)AI技术266

基于真实项目经验的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())

。

相关文章

什么是LLM?看这一篇就够了!

一、全套AGI大模型学习路线 AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能! 二、640套AI大模型报告合集 这套包含640份报告的合集,涵盖了AI大...

LLM介绍

。LLM 被证明在使用指令形式化描述的未见过的任务上表现良好。这意味着 LLM 能够根据任务指令执行任务,而无需事先见过具体示例,展示了其强大的泛化能力。 :小型语言模型通常难以解决涉...

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

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

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

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

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

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

前端开发高级应用:Minimax视频生成提示词中文还是英文好实战案例|Duuu笔记

优先使用英文提示词,因其更契合模型训练语料并能稳定触发视觉特征;其次可采用中英混合策略兼顾文化专有名词;纯中文适用于强本土化场景;最终需通过多指标对比验证最优语言形式。 ☞☞☞AI 智能聊天, 问答...

发表评论

访客

看不清,换一张

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