好用的networkx绘图包

news2025/1/16 13:57:30

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_path
    except 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.coloradmin.cn/o/885181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录 1.确保生成内存溢出文件2.使用idea自带的内存泄漏分析工具3.具体实验一下 1.确保生成内存溢出文件 想分析堆内存溢出,一定在运行jar包时就写上参数-XX:HeapDumpOnOutOfMemoryError,可以看我之前关于如何运行jar包的文章。若你没有写。可以写上…

express学习笔记8 - 文件上传 下载以及预览

一、上传 1、 安装multer (任意选其中一种) yarn add multer --S npm install multer --S 2、新建配置文件(utils/multerConfig) const multer require(multer); const mkdirp require(mkdirp); // const sd require(silly-datetime); const path require(path);con…

什么叫加杠杆投资_个人炒股如何加杠杆

加杠杆投资是指通过借款或者杠杆交易的方式,以较小的自有资金控制较大的资金进行投资。在加杠杆的情况下,投资者可以获得更高的投资回报,但同时也面临较高的风险。 个人炒股加杠杆可以通过以下几种方式实现: 1. 股票配资&#x…

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…

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA 在较低容量存储领域,EEPROM是常用的存储介质,可以通过直接或者文件操作方式进行读写。不同容量的EEPROM的地址对应位数不同,在发送字节的格式上有所区别。EEPROM是非快速访问存储&#xf…

【C语言】每日一题(多数元素)

多数元素,链接奉上 方法 1.摩尔投票2.合理但错误的方法2.1暴力循环2.2排序求出中间元素中间元素 1.摩尔投票 先来简单的介绍摩尔投票: 摩尔投票是一种用来解决绝对众数问题的算法。 什么是绝对众数呢? 在一个集合中,如果一个元素…

Java:迭代器常用方法、增强for循环、Lambda 表达式遍历集合、遍历集合案例

Java 迭代器概述:Iterator 迭代器常用方法 使用迭代器遍历集合时,一开始 it.next()在赵敏的位置,所以第一个打印输出的是赵敏,第二次就到了小昭的位置,第三次到了素素,第四次灭绝,如果多打印了…

探索Java中的面向对象与函数式编程思想

文章目录 🎉 欢迎来到 Java 学习路线专栏~探索Java中的面向对象与函数式编程思想1. 思想概述面向对象思想函数式编程思想 2. 面向对象思想写代码3. Lambda表达式格式4. 练习4.1 无参无返回值4.2 有参有返回值 5. Lambda省略格式6. 使用Lambda的前提条件 &#x1f38…

智慧乡村综合管控平台_数字孪生

数字乡村是伴随网络化、信息化和数字化在农业农村经济社会发展中的应用,既是乡村振兴的战略方向,也是建设数字中国的重要内容。为了进一步提升乡村治理智能化、专业化水平,解决建设顶层缺失、数据孤岛等问题,数字孪生技术被广泛应…

谈谈智慧农业系统

目录 1.智慧农业的概念 2.智慧农业会用到什么技术 3.智慧农业的优势 4.智慧农业的发展前景 1.智慧农业的概念 智慧农业(Smart Agriculture),也被称为农业4.0,是利用先进的信息技术和物联网技术来改进农业生产效率、可持续性和农…

JAVA生成订单号根,可自定义长度、前缀

效率还可以,生成100万数据大概在1秒多左右,不想写说明了,直接粘贴~ public static void main(String[] args) {System.out.println("开始时间" new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS").format(new Date()));L…

Java中调用伪原创API的方法【源码】

在Java中调用API的GET请求可以使用HttpURLConnection或者第三方库如OkHttp等。 使用HttpURLConnection的示例代码: import java.net.HttpURLConnection; import java.net.URL;URL url new URL("http://example.com/api?param1a&param2b"); HttpURLConnectio…

讯飞星火认知大模型全新升级,全新版本、多模交互—测评结果超预期

写在前面 版本新功能 1 体验介绍 登录注册 申请体验 2 具体使用 2.1 多模态能力 2.1.1 多模理解 2.1.2 视觉问答 2.1.3 多模生成 2.2 代码能力 2.2.1 代码生成 2.2.2 代码解释 2.2.3 代码纠错 2.2.4 单元测试 2.3 插件功能 2.3.1 PPT生成 2.3.2 简历生成 2.3.4 文档问答 3 其他…

TiDB基础介绍、应用场景及架构

1. 什么是newsql NewSQL 是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。 NewSQL是指这样一类新式的关系型数据库管理系统,针对OLTP(读-写&…

如何保证微信小游戏存档不丢失?

引言 微信小游戏的兴起为玩家提供了一个轻松便捷的娱乐方式,然而,存档丢失问题一直以来都是开发者和玩家关注的焦点。为了确保玩家的游戏体验和投入能够得到充分的保障,开发团队需要采取一系列方法来保障微信小游戏存档不丢失。本文将介绍一…

C++之std::tuple应用实例(一百七十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

MES管理系统的哪些优势对企业帮助比较大

随着全球制造业的快速发展,MES制造执行系统已成为企业生产管理的重要工具。MES管理系统解决方案集成了企业生产流程中的各个环节,包括计划、调度、质量、设备等,为企业提供了全面的生产管理解决方案。制造企业MES系统的优势颇多,其…

matlab+yalmip+cplex和python3+scipy两种方式实现线性规划求解

Background 对于数学规划问题,有很多的实现。MatlabYALMIPCPLEX这个组合应该是比较主流的,尤其是在电力相关系统中占据着比较重要的地位。MATLAB是一个强大的数值计算工具,用于数学建模、算法开发和数据分析。Yalmip是一个MATLAB工具箱&#…

无涯教程-Perl - splice函数

描述 此函数从LENGTH元素的OFFSET元素中删除ARRAY元素,如果指定,则用LIST替换删除的元素。如果省略LENGTH,则从OFFSET开始删除所有内容。 语法 以下是此函数的简单语法- splice ARRAY, OFFSET, LENGTH, LISTsplice ARRAY, OFFSET, LENGTHsplice ARRAY, OFFSET返回值 该函数…