首页 > 解决方案 > 基于属性着色节点

问题描述

我正在尝试构建一个脚本,该脚本可用于根据我.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 文件包含以下列:Name, Role, Department, Gender. 我现在正在分析一个组织结构图,但节点属性可能会根据应用程序而改变

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

不太清楚如何解决这个问题。我希望完成的是节点的颜色根据它们的属性而不同,在这种情况下是它们的性别。当我现在执行此代码时,我没有错误,但节点颜色没有改变

标签: python-3.xjupyter-notebooknetworkx

解决方案


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

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

推荐阅读