python-使用networkx获取网络节点的程度

时间:2019-07-01 21:13:56

标签: python networking nodes networkx

我想使用NetworkX函数获取所有节点的度分布图,然后绘制一个箱形图。

但该图未显示,并在下面显示错误:

  

x = all_degrees.count(i)

     

AttributeError: 'DegreeView' object has no attribute 'count'

如何解决这个问题?

mac OS 10.14.5(18F132) python 3.7

import networkx as nx
import matplotlib.pyplot as plt

def plot_deg_dist(G):
    all_degrees = nx.degree(G)

    unique_degrees = [v for k, v in all_degrees]
    count_of_degrees = []

    for i in unique_degrees:
        x = all_degrees.count(i)
        count_of_degrees.append(x)

    plt.plot(unique_degrees, count_of_degrees)
    plt.show()

G = nx.read_gml("/Users/kate/Desktop/karate_club/karate.gml")


plot_deg_dist(G)

1 个答案:

答案 0 :(得分:0)

您的主要问题是all_degreesDegreeView可迭代的-不是一个list-因此它没有内置的count方法。 (此外,unique_degrees实际上不会唯一,因为您可以多次显示相同的值。)

解决主要问题

我认为解决问题的最简单方法是像这样重新定义all_degrees(并相应地更新unique_degrees):

all_degrees = [ v for _, v in nx.degree(G) ]
unique_degrees = sorted(set(all_degrees))

这将产生以下图(请注意,这只是一个线图): degrees plot

获取箱形图

您还可以利用matplotlib.pyplot.boxplot为您完成所有繁重的工作。然后,您在plot_deg_dist中需要做的就是获取所有度数的列表并调用boxplot函数:

all_degrees = [ v for _, v in nx.degree(G) ]
plt.boxplot(all_degrees)
plt.show()

degrees box