Обозначение графика в python3 - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь построить граф с помощью networkx, используя узлы как объекты класса. Я уже пометил узлы, но я не могу показать помеченные ребра (на самом деле, вообще не ребра). Я ожидал сделать это, определив соседние узлы внутри класса Node. Я показываю свой код ниже:


# Packages

import random as rd
import networkx as nx
from matplotlib import pyplot as plt

# Classes

class Node:
    def __init__(self, name):
        self.name = name
        self.state = rd.choice([-1, 0, 1])
        self.neighbour = None

    def get_name(self):
        return self.name
    def get_state(self):
        return self.state
    def get_neighbour(self):
        return self.neighbour

# Nodes and neighbours

n1 = Node(1)
n2 = Node(2)
n3 = Node(3)

n1.neighbour = n2
n2.neighbour = n3

# Graph

G = nx.Graph()

G.add_node(n1.name)
G.add_node(n2.name)
G.add_node(n3.name)

pos = nx.spring_layout(G)

nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_edges(G, pos)
nx.draw_networkx_labels(G, pos)
#nx.draw_spectral(G, with_labels=True)   # I also tried this suggestion, but unsuccessfully

plt.savefig('jupyter_graph.png')

Причина использования атрибута «state» в том, что я хочу изменить цвета узлов в зависимости от их состояния (это еще одна проблема). Результат ниже:

введите описание изображения здесь

Края отсутствуют. Вы можете мне помочь?

1 Ответ

0 голосов
/ 13 июля 2020

Пакет networkx не создает график на основе атрибутов вашего класса Node. Значения отображаются потому, что вы передаете их при добавлении нового узла в график с помощью G.add_node(n1.name). Аналогично, чтобы добавить ребра, вам нужно вызвать метод add_edge. См. Руководство

...