matplotlib 在Networkx图表上绘制形状

cbjzeqam  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(210)

给定一个现有的networkx

import networkx as nx
import numpy as np

np.random.seed(123)

graph = nx.erdos_renyi_graph(5, 0.3, seed=123, directed=True)
nx.draw_networkx(graph)

import networkx as nx

G = nx.path_graph(4)
nx.spring_layout(G)
nx.draw_networkx(G)

如何在其中一个节点(如标记为1的节点)的顶部(与之相同的位置)画一个红色圆圈?

iyr7buue

iyr7buue1#

为了能够绘制networkx图,每个节点都需要分配一个位置。默认情况下,nx.spring_layout()用于在调用nx.draw_networkx()时计算位置,但这些位置不会存储。每次绘制函数时都会重新计算这些位置,除非位置被显式添加为参数。
因此,可以预先计算这些位置,然后使用这些位置绘制圆:

import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba
import networkx as nx
import numpy as np

np.random.seed(123)
graph = nx.erdos_renyi_graph(5, 0.3, seed=123, directed=True)
pos = nx.spring_layout(graph)
nx.draw_networkx(graph, pos=pos)
ax = plt.gca()
for node_id, color in zip([1, 4], ['crimson', 'limegreen']):
    ax.add_patch(plt.Circle(pos[node_id], 0.15, facecolor=to_rgba(color, alpha=0.2), edgecolor=color))
ax.set_aspect('equal', 'datalim')  # equal aspect ratio is needed to show circles undistorted
plt.show()

相关问题