基于属性着色节点

时间:2021-02-17 18:55:06

标签: python-3.x jupyter-notebook networkx

我正在尝试构建一个脚本,我可以使用该脚本根据我分别输入到节点和边 .csv 文件中的数据快速可视化网络。我一直在拼凑不同的代码,并具有以下内容:

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
import warnings 
warnings.filterwarnings('ignore')

G = nx.Graph()
df_nodes = pd.read_csv('nodelist-Copy1.csv')
df_edges = pd.read_csv('edgelist-Copy1.csv')

我的 nodelist.csv 文件包含以下列:NameRoleDepartmentGender。我现在正在分析组织结构图,但节点属性可能会因应用程序而异

for index, row in df_nodes.iterrows():
    G.add_node(row['Name'], role=row['Role'], department=row['Department'], gender=row['Gender'])

for index, row in df_edges.iterrows():
    G.add_edges_from([(row['Source'], row['Target'])])

plt.figure(figsize=(25,25))
options = {
    'edge_color': '#FFDEA2',
    'width': 1,
    'with_labels': True,
    'font_size': '7',
}

color_map = {'F':'#f09494', 'M':'#eebcbc'} 
colors = [color_map[G.nodes[node]['gender']] for node in G]

nx.draw(G, node_colors = colors, pos=nx.spring_layout(G, k=0.25, iterations=50), **options)
ax = plt.gca()
ax.collections[0].set_edgecolor("#555555") 
plt.show()

不太清楚如何解决这个问题。我希望实现的是节点根据其属性(在本例中为它们的性别)以不同的颜色着色。当我现在执行这段代码时,我没有错误,但节点颜色没有改变

1 个答案:

答案 0 :(得分:1)

我相信您尝试在图表上访问的属性是 nodes 而不是 node,这就是导致错误的原因。相反,试试这个:

colors = [color_map[G.nodes[node]['gender']] for node in G]