在 Networkx 图上绘制形状

gam*_*ter 4 python graph matplotlib networkx

给定一个现有的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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者

import networkx as nx

G = nx.path_graph(4)
nx.spring_layout(G)
nx.draw_networkx(G)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何在其中一个节点的顶​​部(与节点相同的位置)绘制一个红色圆圈,例如标记为 的节点1

Joh*_*anC 5

为了能够绘制 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()
Run Code Online (Sandbox Code Playgroud)

添加圆圈的networkx图形绘制