绘制节点属性 networkx 的分布图

Plot distribution of node attributes networkx

有向图中的节点具有 NameAgeHeight 作为属性。我想绘制三个属性的分布图,可以吗?

我知道可以通过这种方式获取属性:

name = nx.get_node_attributes(G, "Name")
age = nx.get_node_attributes(G, "Age")
height = nx.get_node_attributes(G, "Height")

但我真的不明白如何在下面的函数中使用它们而不是 G

import networkx as nx

def plot_degree_dist(G):
    degrees = [G.degree(n) for n in G.nodes()]
    plt.hist(degrees)
    plt.show()

plot_degree_dist(nx.gnp_random_graph(100, 0.5, directed=True))

或者有更好的方法来绘制节点属性的分布图吗?

对我来说似乎是一种完全合理的方式。我不知道还有什么更方便的方法。为了更通用,向您的函数添加一个参数,该参数采用您想要绘制的属性的名称。

只知道 nx.get_node_attributes() returns 键控到节点的字典。由于我们只是绘制分布图,因此我们只对值而不是键感兴趣。

这是一个自包含的示例,遵循您的指导:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np


def plot_attribute_dist(G, attribute):
    attribute = nx.get_node_attributes(G, attribute).values()
    plt.hist(attribute)
    plt.show()


attribute_name = 'Name'

G = nx.gnp_random_graph(100, 0.5, directed=True)

rng = np.random.default_rng(seed=42)
for node, data in G.nodes(data=True):
    data[attribute_name] = rng.normal()

plot_attribute_dist(G, attribute_name)

输出