社会网络的构建与可视化
import networkx as nx
import matplotlib.pyplot as plt
#NetworkX基本操作
G=nx.Graph() #创建一个空的图
G.add_node(1) #为图添加一个节点
print(list(G.nodes)) #查看所有节点
#查看所有边
print(list(G.edges))
#从list中添加节点
G.add_nodes_from([2,3,4,5])
print(list(G.nodes))
#添加一条边
G.add_edge(1,2)
print(list(G.edges))
#从list中添加边
G.add_edges_from([(1,3),(2,3),(3,4),(4,5)])
print(list(G.edges))
print(G.number_of_nodes()) #查看一共有多少节点
print(G.number_of_edges()) #查看一共有多少边
#绘制网络图
nx.draw(G,with_labels=True)
plt.show()
#通过调节参数,绘制个性化网络图
nx.draw(G,with_labels=True,pos=nx.circular_layout(G),font_size=20,node_size=2000,alpha=0.7,node_color='g',edge_color='gray',style='dashed',width=5,font_weight='bold')
plt.show()
#为边赋权重的三种方法
G.add_edges_from([(4, 5, {'weight': 3}), (2, 3, {'weight': 8})])
G[1][2]['weight'] = 4.7
G.add_weighted_edges_from([(1, 3, 6.5),(3, 4, 9.8)])
#绘制图中边的权重
edge_labels=dict([((u,v,),d['weight']) for u,v,d in G.edges(data=True)])
nx.draw_networkx_edge_labels(G,pos=nx.circular_layout(G),edge_labels=edge_labels,font_size=15)
#绘制网络图
nx.draw(G,with_labels=True,font_size=15,node_size=1500, pos=nx.circular_layout(G),width=[float(d['weight']*0.5) for (u,v,d) in G.edges(data=True)])
plt.show()