Распределение степени построения сети x.DiGraph с использованием networkx.degree_histogram и matplotlib - PullRequest
0 голосов
/ 28 декабря 2018

Я попытался использовать следующий код для построения распределения степеней в networkx.DiGraph G:

def plot_degree_In(G):
    in_degrees = G.in_degree()
    in_degrees=dict(in_degrees)
    in_values = sorted(set(in_degrees.values()))
    in_hist = [list(in_degrees.values()).count(x) for x in in_values]

    plt.figure() 
    plt.grid(False)
    plt.loglog(in_values, in_hist, 'r.') 
    #plt.loglog(out_values, out_hist, 'b.') 
    #plt.legend(['In-degree', 'Out-degree'])
    plt.xlabel('k')
    plt.ylabel('p(k)')
    plt.title('Degree Distribution')
    plt.xlim([0, 2*100**1])

Но потом я понял, что это неправильный способ сделать это, ипоэтому я изменил его на:

def plot_degree_dist(G):
    degree_hist = nx.degree_histogram(G) 
    degree_hist = np.array(degree_hist, dtype=float)
    degree_prob = degree_hist/G.number_of_nodes()
    plt.loglog(np.arange(degree_prob.shape[0]),degree_prob,'b.')
    plt.xlabel('k')
    plt.ylabel('p(k)')
    plt.title('Degree Distribution')
    plt.show()

Но это дает мне пустой график без данных.

1 Ответ

0 голосов
/ 29 декабря 2018

Один из способов печати гистограммы (в плюс-плюс-градус) с тестовым кодом:

import matplotlib.pyplot as plt
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))

Количество бинов для гистограммы можно настроить, добавив второй параметр в plt.hist.

...