python - 如何在 NetworkX 中的其余节点上为前 20 个节点着色
问题描述
有谁知道如何在 NetworkX 中的其余节点上为前 20 个节点着色?我想将前 20 个节点用绿色着色,其余的用灰色着色。但是,输出仅显示灰色,因为绿色节点位于灰色节点下方。是否有可能在灰色节点上制作那些绿色节点?
此外,是否可以显示前 20 个绿色节点的大小为 20,其余的灰色节点的大小为 10?目前,所有节点的大小都为 10。
解决方案
尝试:
设置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()
推荐阅读
- powershell - New-ScheduledTaskAction -Execute 中的 Powershell 字符数限制
- typescript - 怎么样?运算符不同于在类型中包含未定义?
- python - 未定义的变量“YouTube”python
- infinispan - 通过缓存迭代期间的 Infinispan-8 阻塞状态
- excel - 如何使用 VBA Excel 代码向拥有过期信息的用户显示弹出消息
- navigation - Excel VBA 用户表单导航难题
- javascript - nuxt-link:使用哈希重定向到同一个锚点
- c# - NJsonSchema - 如何将自定义属性添加到从 json 模式生成的 c# 类
- python - 基于标签聚类的networkx颜色
- php - kinesis“getShardIterator”卡住了