这是什么代码你能看懂吗
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
读取文件
aa =r'./data/fl4.xls'
df = pd.DataFrame(pd.read_excel(aa))
df1=df['label1'].drop_duplicates().values.tolist()
df2=df[['label1','label2','weight']]
设置画布大小
plt.figure(figsize=(6, 5))
颜色数据
colors = df['color'].drop_duplicates().values.tolist()
G = nx.Graph()
添加边
for i in df2.index:
G.add_edge(df2.label1[i], df2.label2[i], weight=df2.weight[i])
定义两个边,并给边赋予权重,其中u是起点,v是终点,d是权重
edge1 = [(u, v) for (u, v, d) in G.edges(data=True) if (d['weight'] >=1)]
edge2 = [(u, v) for (u, v, d) in G.edges(data=True) if (d['weight'] >=16)]
图的布局
节点在一个圆上均匀分布
pos = nx.circular_layout(G)
点
nx.draw_networkx_nodes(G, pos, alpha=0.7, node_size=300,node_color=colors)
边
nx.draw_networkx_edges(G,pos,edgelist=edge1,width=1,alpha=0.3,edge_color='g', style='dashed')
nx.draw_networkx_edges(G, pos, edgelist=edge2, width=1.5, alpha=0.5, edge_color='red')
标签
nx.draw_networkx_labels(G, pos, font_size=9)
生成结果
plt.axis('off')
plt.title('《复仇者联盟4》人物关系图')
plt.rcParams['font.size'] = 10
plt.rcParams['font.sans-serif']=['SimHei'] # 解决中文乱码
plt.show()
采用Fruchterman-Reingold力引导法对节点进行布局
通过NetworkX的spring_layout函数生成位置坐标
绘制节点
nx.draw_networkx_nodes(G, pos, alpha=1, node_size=300, node_color=colors, node_shape='p')
