好用的networkx绘图包

1. NetworkX简介

        NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它可以创建、分析和可视化各种类型的网络(包括有向图和无向图),例如社交网络、Web图、生物网络等。

        NetworkX 提供了许多图的算法和分析工具,比如节点的度、网络的直径、最短路径等。还可以使用它来发现社区结构、进行图的聚类分析等。

2. 有向图的绘制及遍历

2.1 有向图绘制

# -*- coding: utf-8 -*-
import networkx as nx
import matplotlib.pyplot as plt# 创建空的有向图的对象
G = nx.DiGraph()
# 添加节点
G.add_node('A')
G.add_node('B')
G.add_nodes_from(['C', 'D', 'E']) 
# 添加有向边
G.add_edge('A', 'B')
G.add_edges_from([('B','C'),('B', 'D'),('C', 'E')]) # 进行图的绘制
layout = nx.spring_layout(G)  # 利用Fruchterman-Reingold force-directed算法生成节点布局
nx.draw(G, layout, with_labels=True)
plt.show()

如下:

其他常见展示布局

layout = nx.circular_layout(G)  # 生成圆形节点布局
layout = nx.random_layout(G)  # 生成随机节点布局
layout = nx.shell_layout(G)   # 生成同心圆节点布局
layout = nx.spectral_layout(G)  # 利用图拉普拉斯特征向量生成节点布局
layout = nx.kamada_kawai_layout(G)  # 使用Kamada-Kawai路径长度代价函数生成布局

2.2 有向图遍历

print(G.nodes)  # 节点列表
# ['A', 'B', 'C', 'D', 'E']
print(G.edges)  # 边列表
# [('A', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'E')]
for node in G.nodes():print("节点>>>", node)in_degree = G.in_degree(node)print("入度:", in_degree)out_degree = G.out_degree(node)print("出度:", out_degree)neighbors = G.neighbors(node)print("邻居节点:", list(neighbors))


3. 带权重的边

3.1 绘制带权重的边

G = nx.DiGraph()
# 直接创建边(包括两个节点), 并设置边的权重
G.add_edge('A', 'B', weight=3)
G.add_weighted_edges_from([('B','C',5), ('C','D',2), ('C','E',5)])# ---进行图的绘制---
layout = nx.spring_layout(G)  # 选择布局算法;
# 获取边的权重
labels = nx.get_edge_attributes(G, 'weight')
# {('A', 'B'): 3, ('B', 'C'): 5, ('C', 'D'): 2, ('C', 'E'): 5}
# 绘制带有权重的边
nx.draw(G, layout, with_labels=True)
nx.draw_networkx_edge_labels(G, layout, edge_labels=labels)  # 添加权重
plt.show()

如下:

 打印边的权重值

# 获取边的权重值列表
print(labels.values())
# dict_values([3, 5, 2, 5])
print("最大权重的边:", max(weights))
print("最小权重的边:", min(weights))

3.2 最短|长路径

# 两点之间最短路径
def get_shortest_path(graph, source, target):try:shortest_path = nx.shortest_path(graph, source, target)return shortest_pathexcept nx.exception.NetworkXNoPath:return "不存在最短路径"# 两点之间最长路径
def get_longest_path(graph, source, target):all_paths = nx.all_simple_paths(graph, source, target)longest_path = max(all_paths, key=len)return longest_path

实验

G = nx.DiGraph()
G.add_edge('A', 'B', weight=3)
G.add_edge('A', 'C', weight=5)
G.add_edge('B', 'C', weight=2)
G.add_edge('B', 'D', weight=4)
G.add_edge('C', 'D', weight=1)# 输出边权重
for u, v, data in G.edges(data=True):print(u, v, data)print("最短路径:", get_shortest_path(G, 'A', 'D'))
# ['A', 'B', 'D']
print("最长路径:", get_longest_path(G, 'A', 'D'))
# ['A', 'B', 'C', 'D']# 按照权重求取最短路径
print("最短路径:", nx.dijkstra_path(G, 'A', 'D', weight='weight'))
# ['A', 'C', 'D']
print("最短距离:", nx.dijkstra_path_length(G, 'A', 'D', weight='weight'))
# 6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/92339.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】2 软件管理器yum和编辑器vim

目录 1. linux软件包管理器yum 1.1 什么是软件包 1.2 关于rzsz 1.3 注意事项 1.4 查看软件包 1.5 如何安装、卸载软件 1.6 centos 7设置成国内yum源 2. linux开发工具-Linux编辑器-vim使用 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行…

GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)

目录 项目概述 发文意义 项目介绍 功能分析 设计概要 功能展示 项目文档 项目概述 “GT Code 图译算法编辑器”是一款跨平台、轻量级的代码编辑器,主要面向软件开发人员,它实现了编辑、编译、绘制代码流程图、生成调试演示动画等功能,以…

透过源码理解Flutter中widget、state和element的关系

1、framework源码组成 Flutter中widget、state、element的源码位于framework.dart中,整个文件6693行(版本Flutter 3.12.0-14.0.pre.28)。整个代码可划分为若干部分,主要包括key、widget、state、element四部分。 1.1 key 关于key的代码65行到272行&am…

如何让CSDN学习成就个人能力六边形全是100分:解析个人能力雷达图的窍门

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

142. 环形链表 II

题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内…

运维监控学习笔记8

在服务器端,我们添加了nginx-server的主机: 在解决Error问题的过程中,我还通过zabbix_get这个命令进行了测试,发现是没有的,后来确认是在web页面配置的过程中,我输错了密码。 yum install zabbix-getzabbi…

应急响应-Webshell

文章目录 一、Webshell概述什么是WebshellWebshell分类基于编程语言基于文件大小/提供的功能多少 Webshell 检测方法 二、常规处置方法三、技术指南1、初步预判2、 Webshell排查3、Web日志分析(查找攻击路径及失陷原因)4、系统排查4.1 Windows4.2 Linux …

淘宝API接口的实时数据和缓存数据区别

电商API接口实时数据是指通过API接口获取到的与电商相关的实时数据。这些数据可以包括商品库存、订单状态、销售额、用户活跃度等信息。 通过电商API接口,可以实时获取到电商平台上的各种数据,这些数据可以帮助企业或开发者做出及时的决策和分析。例如&…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型(勘定Category)栏目。 ・账号分配类型(勘定Category)有: 1,K 原价Center(成本中心。用于消耗物料采购 的过账) 2,E 得意先…

医疗PACS源码,支持三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜

C/S架构的PACS系统源码,PACS主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理,并通过网络向全院提供病人检查影像及诊断报告;各影像科室之间共享不同设备的病人检查影像及诊断报告;在诊断工作站上,调阅HIS中病人的其它…

服务器数据恢复-HP EVA存储常见故障的数据恢复流程

EVA存储原理: EVA系列存储是以虚拟化存储为实现目的的中高端存储设备,内部的结构组成完全不同于其他的存储设备,RAID在EVA内部称之为VRAID。 EVA会在每个物理磁盘(PV)的0扇区写入签名,签名后PV会被分配到不…

2023企业微信0day漏洞复现以及处理意见

2023企业微信0day漏洞复现以及处理意见 一、 漏洞概述二、 影响版本三、 漏洞复现小龙POC检测脚本: 四、 整改意见 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#x…

DevOps系列文章 之 Gitlab+Docker自动部署SpringBoot

1.环境要求 以下服务器的操作系统均为Centos7 服务器A:Gitlab服务器B:GitlabRunner、Docker、docker-compose、Java1.8、maven3.6.3、git ps:这里可以把服务器B的GitlabRunner、Java1.8、maven3.6.3、git单独提出来,独立部署&a…

【MySQL】为什么不推荐使用uuid或者雪花id作为主键?

文章目录 1.原因2.使用uuid(或雪花ID)和自增id的索引结构对比2.1 使用自增id的内部结构2.2 使用uuid(或雪花ID)的索引内部结构2.3 使用自增id的缺点 1.原因 使用UUID或雪花ID(Snowflake ID)作为主键并不是完全不推荐的&#xff0…

二叉树的存储结构(链式存储)—— 数据结构与算法

😶‍🌫️Take your time ! 😶‍🌫️ 💥个人主页:🔥🔥🔥大魔王🔥🔥🔥 💥代码仓库:🔥🔥魔…

Linux 操作文件的系统调用

一、系统调用 系统调用表现出来的形式和库函数看着是一样的,但是系统调用的实现是在内核中,一旦执行系统调用以后,会产生中断,陷入内核,内核去执行相应的代码。我们无法直接去执行内核的代码,系统调用执行…

零基础看懂免费开源的Stable Diffusion

文章目录 前言Diffusion模型推理过程训练过程 Stable Diffusion模型参考 前言 前面一篇文章主要讲了扩散模型的理论基础,还没看过上篇的小伙伴可以点击查看:DDPM理论基础。这篇我们主要讲一下一经推出,就火爆全网的Stable Diffusion模型。St…

SQL-每日一题【1341. 电影评分】

题目 表:Movies 表:Users 请你编写一个解决方案: 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。 …

「鲸脸识别」已上线,夏威夷大学用 5 万张图像训练识别模型,平均精度 0.869

内容一览:人脸识别可以锁定人类身份,这一技术延申到鲸类,便有了「背鳍识别」。「背鳍识别」是利用图像识别技术,通过背鳍识别鲸类物种。传统的图像识别依赖于卷积神经网络 (CNN) 模型,需要大量训练图像,并且…

《3D 数学基础》12 几何图元

目录 1 表达图元的方法 1.1 隐式表示法 1.2 参数表示 1.3 直接表示 2. 直线和射线 2.1 射线的不同表示法 2.1.1 两点表示 2.1.2 参数表示 2.1.3 相互转换 2.2 直线的不同表示法 2.2.1 隐式表示法 2.2.2 斜截式 2.2.3 相互转换 3. 球 3.1 隐式表示 1 表达图元的方…