networkx是一个python包,用于创建、操作和研究复杂网络的结构、动态和功能

使用NetworkX,您可以以标准和非标准数据格式加载和存储网络,生成多种类型的随机和经典网络,分析网络结构,构建网络模型,设计新的网络算法,绘制网络

 Gallery — NetworkX 2.8.4 documentation

建图

G = nx.Graph() #定义了一个空图

#有向图
G = nx.DiGraph() 

添加节点

import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph() #定义了一个空图
G.add_node(1) #增加了1节点
G.add_node('A') #增加了A节点
G.add_nodes_from([2, 3]) #同时加2和3两个节点
nx.draw(G, with_labels=True)
plt.show()

 如果nx.draw不带with_labels=True

 添加边

import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph() #定义了一个空图
G.add_node(1) #增加了1节点
G.add_node('A') #增加了A节点
G.add_nodes_from([2, 3]) #同时加2和3两个节点
G.add_edges_from([(1,2),(1,3),(2,'A'),(2,3)]) #添加边
G.add_edge(2,'A')
nx.draw(G, with_labels=True)
plt.show()

添加边带权重

G.add_weighted_edges_from([(i, j, weight)])

nx.shell_layouot()  布局

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

连通分量

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

probability = []
num_ = []
size_of_max = []
for p in np.arange(0.1, 1, 0.1):
    p = round(p, 1)
    probability.append(p)
    ER = nx.random_graphs.erdos_renyi_graph(n=10, p=p)
    num = nx.number_connected_components(ER)
    print(f"Number of connected components of ER graph with p = {p}: {num}")
    num_.append(int(num))
    max_components = max(nx.connected_components(ER), key=len)
    size_of_max.append(len(max_components))
    print(f"The size of largest connected component of ER graph with p = {p}: {len(max_components)}")
    print()
    nx.draw(ER, with_labels = True)
    plt.savefig(f'ER_{p}.jpg')
plt.clf()
plt.plot(probability, num_)
plt.xlabel('p')
plt.ylabel('Number of connected components')
plt.savefig(f"Num_of_connected_components.jpg")
plt.clf()
plt.plot(probability, size_of_max)
plt.xlabel('p')
plt.ylabel('The size of largest connected component')
plt.savefig(f"Size_of_largest_connected_components.jpg")

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐