使用 Networkx 将节点大小绘制为图例
Plot node size as legend using Networkx
在使用 NetworkX 时,我设法绘制了一个图表,显示与节点属性对应的节点大小。为了生成一致的图,我想在图例中显示节点大小。
是否有预先实现的方法来添加具有定义数量(例如,四个)节点大小和相应节点属性的图例?
我想象的东西类似于附加的图例。
我不确定 built-in 的方法,但是 networkx
绘图算法使用 scatter
设置节点大小,因此您可以创建一组 使用图例中使用的散点图的 ghost 个节点。 (ghost这个词是我编的,因为你实际上并没有看到它们。可能有一个官方接受的词,我不知道。)
出于某种原因,我无法让它们与 scatter
一起使用,所以我改用 plot
。 (请注意 scatter
中值的大小遵循区域而 plot
遵循宽度 as discussed here 因此 ghost 值的大小用于 plot
是由 networkx.draw_networkx
.
生成的大小的 square-root
from math import sqrt
import networkx as nx
import matplotlib.pyplot as plt
# Create graph
G = nx.Graph()
N = 10 # number of nodes
for n in range(1,N + 1):
G.add_node(n, size = n * 100, pos = [0, n]) # size of node based on its number
# Draw graph
node_sizes = nx.get_node_attributes(G, 'size')
nx.draw_networkx(G, node_color = 'b', node_size = [v for v in node_sizes.values()])
# Make legend
for n in [2, 4, 6, 8]:
plt.plot([], [], 'bo', markersize = sqrt(n*100), label = f"{n}")
plt.legend(labelspacing = 5, loc='center left', bbox_to_anchor=(1, 0.5), frameon = False)
在使用 NetworkX 时,我设法绘制了一个图表,显示与节点属性对应的节点大小。为了生成一致的图,我想在图例中显示节点大小。 是否有预先实现的方法来添加具有定义数量(例如,四个)节点大小和相应节点属性的图例?
我想象的东西类似于附加的图例。
我不确定 built-in 的方法,但是 networkx
绘图算法使用 scatter
设置节点大小,因此您可以创建一组 使用图例中使用的散点图的 ghost 个节点。 (ghost这个词是我编的,因为你实际上并没有看到它们。可能有一个官方接受的词,我不知道。)
出于某种原因,我无法让它们与 scatter
一起使用,所以我改用 plot
。 (请注意 scatter
中值的大小遵循区域而 plot
遵循宽度 as discussed here 因此 ghost 值的大小用于 plot
是由 networkx.draw_networkx
.
from math import sqrt
import networkx as nx
import matplotlib.pyplot as plt
# Create graph
G = nx.Graph()
N = 10 # number of nodes
for n in range(1,N + 1):
G.add_node(n, size = n * 100, pos = [0, n]) # size of node based on its number
# Draw graph
node_sizes = nx.get_node_attributes(G, 'size')
nx.draw_networkx(G, node_color = 'b', node_size = [v for v in node_sizes.values()])
# Make legend
for n in [2, 4, 6, 8]:
plt.plot([], [], 'bo', markersize = sqrt(n*100), label = f"{n}")
plt.legend(labelspacing = 5, loc='center left', bbox_to_anchor=(1, 0.5), frameon = False)