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

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

admin2个月前 (04-09)AI技术62

基于真实项目经验的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 生态系统的无...

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

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

AI高级应用:Perplexity 怎么写用户手册 Perplexity 产品帮助文档生成【技术】实战案例|Duuu笔记

Perplexity AI用户手册需基于API元数据、真实UI截图、典型场景示例、响应字段解析及动态调试指令五步构建:一调用API获取参数与错误码;二标注网页端搜索框、引用图标等组件;三设计信息检索、...

深入理解前端开发:Minimax视频生成黑科技:复杂动作模拟完全指南|Duuu笔记

为精准模拟复杂动作,需采用分帧提示词构建、骨骼关键点引导注入和多阶段动作蒸馏三法:一、将动作拆解为带空间姿态的关键帧序列并加物理约束;二、注入2D/3D关键点坐标锚定关节位置;三、通过粗生成→特征提取...

大模型超详细盘点!常用的大模型及其优缺点、有潜力的大模型、国内大模型行业落地的现况、国内大模型优势、挑战与前景

除了上述大模型外,还有一些有潜力的大模型值得关注,如: 华为云——盘古大模型 :华为基于Transformer架构打造的超大规模人工智能模型,具有万亿级别参数,可以在图像、语音...

前端开发高级应用:骡子快跑支持日程安排吗 骡子快跑时间管理助手用法实战案例|Duuu笔记

骡子快跑具备日程安排能力,可通过计算机模式构建长效日程代理、自然语言注入日历事件、绑定外部日历实现双向同步三种方式实现。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Dee...

发表评论

访客

看不清,换一张

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