有关Python Network前面已经写过两篇基础入门文章
Python Network(一)
Python Network(二)
本文主要是代码实战的case,主要看一些小技巧的地方
目录
1. 无向图
1.1 无向图-数据来源数组
import networkx as nx
# 创建空的网格
G=nx.Graph()
# 添加节点
G.add_node('JFK')
G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL'])
# G.number_of_nodes() # 查看节点数,输出结果7
# 添加连线
G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')])
G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')])
# 绘制网络图
# nx.draw(G,pos=nx.circular_layout(G),with_labels=True)
nx.draw_networkx(G,pos=nx.circular_layout(G),with_labels=True,alpha=0.5,node_color='yellow',node_shape='s',
linewidths=4,
width=2,edge_color='blue',style='--',
font_size=15,font_color='blue',font_family='SimHei')
# pos选用圆形样式,with_labels=True在节点上绘制标签,alpha=0.5节点透明度
#linewidths=4节点边框宽度为4,node_color='yellow'节点颜色设为黄色,node_shape='s'节点的形状设为正方形
# width=2边的线宽2,edge_color='blue'设置边的颜色,style='--'边的线样式,
# font_size=15设置标签字号大小,font_color='blue'设置标签字体颜色,font_family='SimHei'设置标签字体
1.2 无向图-数据来源外部引入数据
import pandas as pd
import networkx as nx
NXdata=pd.read_excel('file_name',index_col=0)
nf=nx.from_pandas_adjacency(NXdata) # 从外部引入数据,也可以是dataframe格式
nx.draw_networkx(nf,pos=nx.circular_layout(nf),with_labels=True,alpha=0.5)
2. 有向图
#step1:创建空图
import networkx as nx
G=nx.DiGraph() #创建什么都没有的空图
#step2:给上述空图加边
start=[1,3,5,7]#边的起点列表
to=[2,4,6,8]#边的终点列表
for j in range(len(start)):
G.add_edge(start[j], to[j])
nx.draw(G,with_labels=True)
import matplotlib.pyplot as plt
plt.show()
# 最后两句其实不加,也没什么
3. 带权重
3.1 带权重无向图
test1
#step1:创建空图
import networkx as nx
G=nx.Graph() #创建什么都没有的空图
#step2:给上述空图加边
start=[1,3,5,7,9,1]#边的起点列表
to=[2,4,6,8,10,3]#边的终点列表
value=[0.1,1,10,15,5,6] #边的权重列表
for j in range(0, len(start)):
G.add_weighted_edges_from([(start[j], to[j], value[j])]) # 边的起点,终点,权重
#step3:规定图的输出:边的粗细、节点的摆放位置等
nx.draw(G, with_labels=True,pos=nx.circular_layout(G),
width=[float(v['weight']) for (r, c, v) in G.edges(data=True)])
test2
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_edge('a', 'b', weight=0.6)
G.add_edge('a', 'c', weight=0.2)
G.add_edge('c', 'd', weight