ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Networkx

2021-09-22 13:34:04  阅读:338  来源: 互联网

标签:11 10 plt nx Networkx 节点 ER


Networkx基本用法

目录

1.网络的初始化

1.1 四种基本网络模型的创建

规则网络

import networkx as nx
import matplotlib.pyplot as plt

def CreateRGGraph(k,N):
    RG=nx.random_graphs.random_regular_graph(k,N)
    pos=nx.spectral_layout(RG)     #图形样式:根据图的拉普拉斯特征向量排列节点的
    plt.subplot(111)
    nx.draw(RG,pos,with_labels=False,node_size=10)
    plt.show()
    return RG

CreateRGGraph(8,100)

规则网络

<networkx.classes.graph.Graph at 0x18b95634548>

ER随机网络

import networkx as nx
import matplotlib.pyplot as plt

def CreateERGraph(N,p):
    ER = nx.random_graphs.erdos_renyi_graph(N, p)
    pos = nx.shell_layout(ER)  #图形样式:这里是节点在同心圆上分布
    plt.subplot(111)
    nx.draw(ER, pos, with_labels=False, node_size=10)
    plt.show()
    return ER

ER=CreateERGraph(100,0.1)

随机网络

WS小世界网路

import networkx as nx
import matplotlib.pyplot as plt

def CreateWSGraph(N,k,p):
    WS = nx.random_graphs.watts_strogatz_graph(N, k, p)
    pos = nx.circular_layout(WS)  # 图形样式:这里是节点在一个圆环上均匀分布
    plt.subplot(111)
    nx.draw(WS, pos, with_labels=False, node_size=10)
    plt.show()
    return WS

WS=CreateWSGraph(100,8,0.4)

小世界网络

BA无标度网络

import networkx as nx
import matplotlib.pyplot as plt

def CreateBAGraph(N,m):
    BA = nx.random_graphs.barabasi_albert_graph(N, m)
    pos = nx.spring_layout(BA)  # 图形的样式:这里是中心放射状
    plt.subplot(111)
    nx.draw(BA, pos, with_labels=False, node_size=10)
    plt.show()
    return BA

BA=CreateBAGraph(100,1)

无标度网络

1.2 网络图的绘制

参考链接:https://blog.csdn.net/shanshanhi/article/details/55192884
各个布局的源代码:
https://blog.csdn.net/ztf312/article/details/50834463

netwokx绘图参数

参数用法
node_size指定节点的尺寸大小
node_color指定节点的颜色
node_shape节点形状(默认为圆形,用’o’表示)
alpha透明度(默认为1.0)
width边的宽度(默认为1.0)
edge_color边的颜色
style边的样式
with_labels节点是否带标签
font_size节点标签字体大小
font_color节点标签字体颜色

布局方式

  • circular_layout:节点在一个圆环上均匀分布
  • random_layout:节点随机分布
  • shell_layout:节点在同心圆上分布
  • spring_layout:用Fruchterman-Reingold算法排列节点
  • spectral_layout:根据图的拉普拉斯特征向量排列节

2. 基本操作

2.1 网络的存储与读取

邻接矩阵存储

import numpy as np
import networkx as nx

def SaveGraph(G,type):
    matrix=nx.to_numpy_matrix(G)
    np.savetxt("%s.txt"%type,matrix,fmt="%d",delimiter="    ")
#fmt为指定保存的文件格式,delimiter表示分隔符

网络的读取

def loadGraph():
    matrix=np.loadtxt("G.txt")
    G=nx.Graph()
    for i in range(len(matrix)):
        for j in range(len(matrix)):
            if matrix[i][j]==1:       #针对无权图
                G.add_edge(i,j)
    return G

2.2 节点、边的增删改查

参考链接:https://blog.csdn.net/qq_34107425/article/details/104085551

添加节点

import networkx as nx
import matplotlib.pyplot as plt

G=nx.Graph()
G.add_node('a')
G.add_nodes_from(['b','c','d','e'])
nx.draw(G,with_labels=True)
plt.show()

访问节点

print("图中节点:",G.nodes())
print("节点数目:",G.number_of_nodes())
图中节点: ['a', 'b', 'c', 'd', 'e']
节点数目: 5

删除节点

G.remove_node('a')
G.remove_nodes_from(['c','d'])
nx.draw(G,with_labels=True)
plt.show()

添加边

G=nx.Graph()
G.add_nodes_from(['a','b','c','d','e'])
G.add_edge('a','b')
G.add_edges_from([('a','c'),('b','d')])
nx.draw(G,with_labels=True)
plt.show()

访问边

print("图中所有的边:",G.edges())
print("图中的边数:",G.number_of_edges())
图中所有的边: [('a', 'b'), ('a', 'c'), ('b', 'd')]
图中的边数: 3

遍历边

#有权重的边遍历
for u,v,d in G.edges(data='weight'):
    print((u,v,d))
('a', 'b', None)
('a', 'c', None)
('b', 'd', None)
#无权重的边的遍历
for n, nbrs in G.adjacency():
    for nbr, eattr in nbrs.items():
        print('({},{})'.format(n,nbr))
(a,b)
(a,c)
(b,a)
(b,d)
(c,a)
(d,b)

3. 网络的参数

参考链接:https://blog.csdn.net/weixin_29157361/article/details/112804517

import networkx as nx
import matplotlib.pyplot as plt

def CreateERGraph(N,p):
    ER = nx.random_graphs.erdos_renyi_graph(N, p)
    pos = nx.shell_layout(ER)  
    plt.subplot(111)
    nx.draw(ER, pos, with_labels=False, node_size=10)
    plt.show()
    return ER

ER=CreateERGraph(100,0.1)

网络度值

  1. nx.degree()返回值为列表,列表中存储由节点序号和度值构成的元组
degrees=nx.degree(ER)
DegreeView({0: 10, 1: 7, 2: 8, 3: 12, 4: 6, 5: 9, 6: 9, 7: 9, 8: 7, 9: 10, 10: 6, 11: 11, 12: 15, 13: 12, 14: 9, 15: 11, 16: 8, 17: 10, 18: 11, 19: 8, 20: 11, 21: 12, 22: 13, 23: 7, 24: 12, 25: 8, 26: 11, 27: 13, 28: 9, 29: 9, 30: 13, 31: 10, 32: 7, 33: 12, 34: 12, 35: 10, 36: 6, 37: 8, 38: 10, 39: 12, 40: 11, 41: 11, 42: 4, 43: 7, 44: 17, 45: 7, 46: 11, 47: 10, 48: 6, 49: 15, 50: 13, 51: 15, 52: 10, 53: 13, 54: 8, 55: 6, 56: 9, 57: 12, 58: 18, 59: 11, 60: 12, 61: 6, 62: 11, 63: 9, 64: 11, 65: 18, 66: 5, 67: 11, 68: 15, 69: 8, 70: 11, 71: 11, 72: 7, 73: 13, 74: 10, 75: 9, 76: 9, 77: 5, 78: 6, 79: 11, 80: 16, 81: 8, 82: 9, 83: 11, 84: 10, 85: 7, 86: 4, 87: 13, 88: 14, 89: 8, 90: 8, 91: 8, 92: 9, 93: 10, 94: 15, 95: 12, 96: 8, 97: 6, 98: 8, 99: 13})
  1. nx.degree_histogram()返回度值的列表
degree=nx.degree_histogram(ER)
[0, 0, 0, 0, 2, 2, 8, 8, 13, 12, 11, 16, 10, 8, 1, 5, 1, 1, 2]

聚集系数

  1. nx.clustering()以字典的形式返回各节点的聚集系数
clustering=nx.clustering(ER)
  1. 平均聚类系数
nx.average_clustering(ER)
0.08843764895235477

其他

  1. 节点度中心系数:通过节点的度表示节点在图中的重要性
degree_centrality=nx.degree_centrality(ER)
  1. 节点距离中心系数:通过距离来表示节点在图中的重要性
closeness_centrality=nx.closeness_centrality(ER)
  1. 节点介数中心系数
betweenness_centrality=nx.betweenness_centrality(ER)
  1. 网络直径
d=nx.diameter(ER)
  1. 网络平均最短路径
r=nx.average_shortest_path_length(ER)

标签:11,10,plt,nx,Networkx,节点,ER
来源: https://blog.csdn.net/qq_46581394/article/details/120413063

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有