Добавьте граничные веса, чтобы построить вывод в networkx из матрицы смежности - PullRequest
1 голос
/ 06 апреля 2019

Я генерирую случайный граф и рисую его из матрицы смежности.Я должен быть в состоянии добавить веса края.

Я смотрел на Добавление весов ребер для построения вывода в сети x , и это, кажется, работает нормально и это именно то, что я ищу на дисплее, но это работает только при добавлении ребериндивидуально.

Я использую: nx.from_numpy_matrix (G, create_using = nx.DiGraph ())

И в соответствии с документацией , если несимметричная матрица смежностиимеет только целочисленные записи (что он делает), записи будут интерпретироваться как взвешенные ребра, соединяющие вершины (без создания параллельных ребер).Поэтому, глядя на Добавление весов ребер для вывода графика в сети x , они захватывают атрибуты узла, захватывают атрибуты меток и рисуют метки ребер.Но я не могу взять атрибуты.Кто-нибудь знает, как отображать эти ребра, все еще используя эту матрицу смежности?

Заранее спасибо!

from random import random
import numpy
import networkx as nx
import matplotlib.pyplot as plt

#here's how I'm generating my random matrix
def CreateRandMatrix( numnodes = int):
    def RandomHelper():
        x = random()
        if x < .70:
            return(0)
        elif .7 <= x and x <.82:
            return(1)
        elif .82 <= x and x <.94:
            return(2)
        else:
            return(3)
    randomatrix = numpy.matrix([[RandomHelper() for x in range(numnodes)] for y in range(numnodes)])
    for i in range(len(randomatrix)):
        randomatrix[i,i]=0
    return randomatrix

#this generate the graph I want to display edge weights on
def Draw(n = int): 
    MatrixtoDraw = CreateRandMatrix(n)
    G = nx.from_numpy_matrix(MatrixtoDraw, create_using = nx.DiGraph())
    nx.draw_spring(G, title="RandMatrix",with_labels=True)
    plt.show()

Это моя попытка следовать Добавление весов ребер для построения вывода вnetworkx .

def Draw2(n = int):
    MatrixtoDraw = CreateRandMatrix(n)
    G = nx.from_numpy_matrix(MatrixtoDraw, create_using = nx.DiGraph())
    nx.draw_spring(G, title="RandMatrix",with_labels=True)
    pos=nx.get_node_attributes(G,'pos')
    labels = nx.get_edge_attributes(G,'weight')
    nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)
    plt.show()

Если я запускаю каждую строку отдельно на холостом ходу, я получаю

>>> nx.get_node_attributes(G,'pos')
{}
>>> nx.get_node_attributes(G,'weight')
{}

Почему они не извлекаются из графической информации, генерируемой матрицей смежности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...