我正在尝试构建一个脚本,我可以使用该脚本根据我分别输入到节点和边 .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()
不太清楚如何解决这个问题。我希望实现的是节点根据其属性(在本例中为它们的性别)以不同的颜色着色。当我现在执行这段代码时,我没有错误,但节点颜色没有改变
答案 0 :(得分:1)
我相信您尝试在图表上访问的属性是 nodes
而不是 node
,这就是导致错误的原因。相反,试试这个:
colors = [color_map[G.nodes[node]['gender']] for node in G]