我想使用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)
答案 0 :(得分:0)
您的主要问题是all_degrees
是DegreeView
可迭代的-不是一个list
-因此它没有内置的count方法。 (此外,unique_degrees
实际上不会唯一,因为您可以多次显示相同的值。)
解决主要问题
我认为解决问题的最简单方法是像这样重新定义all_degrees
(并相应地更新unique_degrees
):
all_degrees = [ v for _, v in nx.degree(G) ]
unique_degrees = sorted(set(all_degrees))
获取箱形图
您还可以利用matplotlib.pyplot.boxplot
为您完成所有繁重的工作。然后,您在plot_deg_dist
中需要做的就是获取所有度数的列表并调用boxplot
函数:
all_degrees = [ v for _, v in nx.degree(G) ]
plt.boxplot(all_degrees)
plt.show()