如何使用 Pandas 中的列为 networkx 中的节点着色
How to color nodes within networkx using a column in Pandas
我有这个数据集:
User Val Color
92 Laura NaN red
100 Laura John red
148 Laura Mike red
168 Laura Mirk red
293 Laura Sara red
313 Laura Sim red
440 Martyn Pierre orange
440 Martyn Hugh orange
440 Martyn Lauren orange
440 Martyn Sim orange
我想为每个用户(没有重复)分配相应的颜色:在这个例子中,名为劳拉的节点应该是红色的;名为 Martyn 的节点应该是橙色的;其他节点(John、Mike、Mirk、Sara、Sim、Pierrre、Hugh 和 Lauren)应该是绿色的。
我曾尝试使用此列(颜色)通过使用 networkx 在我的代码中定义一组颜色,但该方法似乎是错误的,因为节点没有像我之前描述的那样着色,即正如我所期望的那样。
请看下面我使用的代码:
我正在使用以下代码:
G = nx.from_pandas_edgelist(df, 'User', 'Val')
labels = [i for i in dict(G.nodes).keys()]
labels = {i:i for i in dict(G.nodes).keys()}
colors = df[["User", "Color"]].drop_duplicates()["Color"]
plt.figure(3,figsize=(30,50))
pos = nx.spring_layout(G)
nx.draw(G, node_color = df.Color, pos = pos)
net = nx.draw_networkx_labels(G, pos = pos)
看来您的方向是正确的,但有几处地方出错了。在使用 drop_duplicates
的同时,构建一个字典并使用它来查找 nx.draw
中的颜色。此外,您不需要构建 labels
字典,nx.draw
可以为您处理。
G = nx.from_pandas_edgelist(df, 'User', 'Val')
d = dict(df.drop_duplicates(subset=['User','Color'])[['User','Color']]
.to_numpy().tolist())
# {'Laura': 'red', 'Martyn': 'orange'}
nodes = G.nodes()
plt.figure(figsize=(10,6))
pos = nx.draw(G, with_labels=True,
nodelist=nodes,
node_color=[d.get(i,'lightgreen') for i in nodes],
node_size=1000)
我有这个数据集:
User Val Color
92 Laura NaN red
100 Laura John red
148 Laura Mike red
168 Laura Mirk red
293 Laura Sara red
313 Laura Sim red
440 Martyn Pierre orange
440 Martyn Hugh orange
440 Martyn Lauren orange
440 Martyn Sim orange
我想为每个用户(没有重复)分配相应的颜色:在这个例子中,名为劳拉的节点应该是红色的;名为 Martyn 的节点应该是橙色的;其他节点(John、Mike、Mirk、Sara、Sim、Pierrre、Hugh 和 Lauren)应该是绿色的。 我曾尝试使用此列(颜色)通过使用 networkx 在我的代码中定义一组颜色,但该方法似乎是错误的,因为节点没有像我之前描述的那样着色,即正如我所期望的那样。 请看下面我使用的代码:
我正在使用以下代码:
G = nx.from_pandas_edgelist(df, 'User', 'Val')
labels = [i for i in dict(G.nodes).keys()]
labels = {i:i for i in dict(G.nodes).keys()}
colors = df[["User", "Color"]].drop_duplicates()["Color"]
plt.figure(3,figsize=(30,50))
pos = nx.spring_layout(G)
nx.draw(G, node_color = df.Color, pos = pos)
net = nx.draw_networkx_labels(G, pos = pos)
看来您的方向是正确的,但有几处地方出错了。在使用 drop_duplicates
的同时,构建一个字典并使用它来查找 nx.draw
中的颜色。此外,您不需要构建 labels
字典,nx.draw
可以为您处理。
G = nx.from_pandas_edgelist(df, 'User', 'Val')
d = dict(df.drop_duplicates(subset=['User','Color'])[['User','Color']]
.to_numpy().tolist())
# {'Laura': 'red', 'Martyn': 'orange'}
nodes = G.nodes()
plt.figure(figsize=(10,6))
pos = nx.draw(G, with_labels=True,
nodelist=nodes,
node_color=[d.get(i,'lightgreen') for i in nodes],
node_size=1000)