天天看點

python社交網絡圖

社交網絡圖

nx.circular_layout()指定網絡圖節點的布局方式

nx.draw_networkx_nodes()繪制網絡圖的節點

nx.draw_networkx_edges()繪制網絡的邊

nx.draw_networkx_labels()為節點添加标簽

import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
import os
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負号
path1=os.getcwd()+'\\'+'紅樓夢人物關系1.xlsx'
path2=os.getcwd()+'\\'+'紅樓夢人物關系度.xlsx'
Red_df=pd.read_excel(path1)
Gdegree=pd.read_excel(path2)
print(Red_df,Gdegree)
plt.figure(figsize=(8,8))
#生成社交網絡圖
G=nx.Graph()
for ii in Red_df.index:
    G.add_edge(Red_df.First[ii],
    Red_df.Second[ii],
    weight=Red_df.weight[ii])
#根據權重定義2種邊
elarge=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight']>0.4]
esmall=[(u,v) for (u,v,d) in G.edges(data=True) if (d['weight']>0.25)&(d['weight']<=0.4)]
nx.circular_layout(G)##圖的布局方式,圓形
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,alpha=0.4,node_size=20+Gdegree.degree*15)
#設定邊的形式
nx.draw_networkx_edges(G,pos,edgelist=elarge,width=3,alpha=1,edge_color='r')
nx.draw_networkx_edges(G,pos,edgelist=esmall,width=1,alpha=0.8,edge_color='b',style='dashed')
nx.draw_networkx_labels(G,pos,font_size=10)
plt.axis('off')
plt.title("《紅樓夢》人物關系")
plt.show()
           
python社交網絡圖