绘制节点属性 networkx 的分布图
Plot distribution of node attributes networkx
有向图中的节点具有 Name
、Age
和 Height
作为属性。我想绘制三个属性的分布图,可以吗?
我知道可以通过这种方式获取属性:
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)
输出
有向图中的节点具有 Name
、Age
和 Height
作为属性。我想绘制三个属性的分布图,可以吗?
我知道可以通过这种方式获取属性:
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)
输出