Advertisement

这是什么代码你能看懂吗

阅读量:

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')

全部评论 (0)

还没有任何评论哟~