首页 > 解决方案 > 如何在 NetworkX 中的其余节点上为前 20 个节点着色

问题描述

有谁知道如何在 NetworkX 中的其余节点上为前 20 个节点着色?我想将前 20 个节点用绿色着色,其余的用灰色着色。但是,输出仅显示灰色,因为绿色节点位于灰色节点下方。是否有可能在灰色节点上制作那些绿色节点?

此外,是否可以显示前 20 个绿色节点的大小为 20,其余的灰色节点的大小为 10?目前,所有节点的大小都为 10。

标签: pythonpandasnetworkx

解决方案


尝试:

设置MRE

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import string

df = pd.DataFrame({'ID': list(string.ascii_uppercase),
                   'PageRank': np.random.randint(10, 100, len(string.ascii_uppercase))})

top_5_lst = df.sort_values('PageRank')['ID'].head(5).tolist()
not_top_5_lst = df.loc[~df['ID'].isin(top_5_lst), 'ID'].tolist()

edges = pd.DataFrame({'from': np.random.choice(list(string.ascii_uppercase), 1000),
                      'to': np.random.choice(list(string.ascii_uppercase), 1000)})

G = nx.from_pandas_edgelist(edges, source='from', target='to')

为了达到您的预期,您必须手动控制图形绘制,尤其是对于 z 顺序。你可以做:

# Compute positions
pos = nx.spring_layout(G)

# Draw nodes not in top5
pc1 = nx.draw_networkx_nodes(G, pos, nodelist=not_top_5_lst,
                             node_color='gray', node_size=10)

# Draw top5 nodes
pc2 = nx.draw_networkx_nodes(G, pos, nodelist=top_5_lst, 
                             node_color='#00D992', node_size=20)
pc2.zorder = 3  # set z-order to 3 (2 by default for gray nodes)

# Draw edges
lc = nx.draw_networkx_edges(G, pos, width=0.2)

plt.show()

NetworkX 图


推荐阅读