Python中的Networkx的基本使用

 更新时间:2023年02月14日 16:22:41   作者:酒酿小圆子~  
Networkx是一个Python的包,可以用来创建和处理复杂的图网络结构,这篇文章主要介绍了Python中的Networkx详解,需要的朋友可以参考下

中文教程: https://www.osgeo.cn/networkx/install.html
英文教程: https://networkx.org/documentation/stable/install.html

1. 安装Networkx

# 使用pip安装
pip install networkx

# 使用conda安装
conda install networkx

2. Networkx的基本使用

2.1 导入networkx

import networkx as nx

2.2 创建Graph

G = nx.Graph()          # 无向图
G = nx.DiGraph()        # 有向图
G = nx.MultiGraph()     # 多重无向图
G = nx.MultiDigraph()   # 多重有向图
G.clear()               # 清空图

根据定义,Graph 是一组节点(顶点)和已识别的节点对(称为边、链接等)的集合。在NetworkX中,节点可以是任何 hashable 对象,例如文本字符串、图像、XML对象、另一个图形、自定义节点对象等。

2.3 给Graph添加边

G.add_edge(1, 2)             # default edge data=1
G.add_edge(2, 3, weight=0.9) # specify edge data
# 如果是边有许多的权,比如有长度和宽度的属性,那么:
G.add_edge(n1, n2, length=2, width=3)
 
elist = [(1, 2), (2, 3), (1, 4), (4, 2)]
G.add_edges_from(elist)
elist = [('a', 'b', 5.0), ('b', 'c', 3.0), ('a', 'c', 1.0), ('c', 'd', 7.3)]
G.add_weighted_edges_from(elist)
 
# 如果给结点的名称是其它符号,想离散化成从x开始的数字标记,那么:
G = nx.convert_node_labels_to_integers(G, first_label=x)

2.4 Graph基本信息获取

nx.info(G) # 图信息的概览
G.number_of_nodes()
G.number_of_edges()
# 获取和节点idx连接的边的attr属性之和
G.in_degree(idx, weight='attr')
 
# 如果想知道某个结点相连的某个边权之和:
DG.degree(nodeIdx, weight='weightName')
 
# 获取结点或者边的属性集合,返回的是元组的列表
G.nodes.data('attrName')
G.edges.data('attrName')
 
# 获取n1 n2的边的length权重,那么:
G[n1][n2]['length']
# 如果是有重边的图,选择n1,n2第一条边的length权重,则:
G[n1][n2][0]['length']
 
# 获取n1结点的所有邻居
nx.all_neighbors(G, n1)
 
# 判断图中n1到n2是否存在路径
nx.has_path(G, n1, n2)
# 根据一个结点的list,获取子图
subG = nx.subgraph(G, nodeList)

2.5 Graph的绘制

# 最简单的绘制
import matplotlib.pyplot as plt
nx.draw(G)
plt.show()
 
# 设置其他相关参数
nx.draw(G,
    with_labels=True,
    pos = nx.sprint_layout(G),
    node_color=color_list,
    edge_color='k',
    node_size=100,
    node_shape='o',
    linewidths=2,
    width=1.0,
    alpha=0.55,
    style='solid',
    font_size=9,
    font_color='k'
)

2.6 Graph的其他内置算法

# 最短路算法 返回最短路的路径列表
nx.shortest_path(G, n1, n2, method='dijkstra')

# 以及各种图的算法,比如流,割等等等等,大家可以看文档探索下

3 其他

3.1 read_edgelist( )

Read a graph from a list of edges.
函数定义如下:

 read_edgelist(path, comments='#', delimiter=None, create_using=None, nodetype=None, data=True, edgetype=None, encoding='utf-8'):
    '''
    Read a graph from a list of edges.
    
    Parameters :	
    path : file or string
        File or filename to write. If a file is provided, it must be opened in ‘rb' mode. Filenames ending in .gz or .bz2 will be uncompressed.

    comments : string, optional
        The character used to indicate the start of a comment.
        
    delimiter : string, optional
        The string used to separate values. The default is whitespace.
        
    create_using : Graph container, optional,
        Use specified container to build graph. The default is networkx.Graph, an undirected graph.

    nodetype : int, float, str, Python type, optional
        Convert node data from strings to specified type

    data : bool or list of (label,type) tuples
        Tuples specifying dictionary key names and types for edge data

    edgetype : int, float, str, Python type, optional OBSOLETE
        Convert edge data from strings to specified type and use as ‘weight'

    encoding: string, optional
        Specify which encoding to use when reading file.

    Returns :	
    G : graph
        A networkx Graph or other type specified with create_using
    '''

样例:

nx.write_edgelist(nx.path_graph(4), "test.edgelist")
G=nx.read_edgelist("test.edgelist")

fh=open("test.edgelist", 'rb')
G=nx.read_edgelist(fh)
fh.close()

G=nx.read_edgelist("test.edgelist", nodetype=int) G=nx.read_edgelist("test.edgelist",create_using=nx.DiGraph())

到此这篇关于Python中的Networkx详解的文章就介绍到这了,更多相关Python中Networkx内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现批量转换文件编码的方法

    Python实现批量转换文件编码的方法

    这篇文章主要介绍了Python实现批量转换文件编码的方法,涉及Python针对文件的遍历及编码转换实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python如何利用re模块正则表达式匹配ip地址

    python如何利用re模块正则表达式匹配ip地址

    这篇文章主要介绍了python如何利用re模块正则表达式匹配ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python中去空格函数的用法

    python中去空格函数的用法

    这篇文章主要介绍了python中去空格函数的用法,很实用的技巧,需要的朋友可以参考下
    2014-08-08
  • Python基础学习之常见的内建函数整理

    Python基础学习之常见的内建函数整理

    所谓的内建函数,可以直接使用,而不需要import。下面这篇文章主要给大家整理介绍了关于Python基础学习之常见的一些内建函数,文中通过示例代码为大家介绍的非常详细,需要的朋友可以参考借鉴,下面跟着小编来一起学习学习吧。
    2017-09-09
  • Python中sub()的用法说明

    Python中sub()的用法说明

    这篇文章主要介绍了Python中sub()的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 简单介绍一下pyinstaller打包以及安全性的实现

    简单介绍一下pyinstaller打包以及安全性的实现

    这篇文章主要介绍了简单介绍一下pyinstaller打包以及安全性的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python3多线程处理爬虫的实战

    Python3多线程处理爬虫的实战

    本文主要介绍了Python3多线程处理爬虫的实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python 解决空列表.append() 输出为None的问题

    Python 解决空列表.append() 输出为None的问题

    在本篇文章里小编给大家整理了一篇关于Python 解决空列表.append() 输出为None的问题的相关内容,有兴趣的朋友们可以学习下。
    2021-05-05
  • 详解python的字典及相关操作

    详解python的字典及相关操作

    本文主要介绍了python的字典及相关操作,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • python-序列解包(对可迭代元素的快速取值方法)

    python-序列解包(对可迭代元素的快速取值方法)

    今天小编就为大家分享一篇python-序列解包(对可迭代元素的快速取值方法),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论