Как просмотреть графики, созданные с использованием библиотеки NetworkX без Anaconda / Spyder? - PullRequest
0 голосов
/ 18 марта 2020

Я делаю курс дискретной математики. Студенты должны использовать библиотеку NetworkX для визуализации графиков. Инструкторы и ТА используют Spyder и Anaconda. И у меня нет планов их использования. Я не могу просматривать графики, созданные библиотекой NetworkX. Остальная часть кода работает отлично. Вот пример:

import networkx as nx
G = nx.Graph()
for i in range(1, 6):
    G.add_node(i)

G.add_edge(1, 2)
G.add_edge(2, 3)
G.add_edge(3, 4)
G.add_edge(4, 5)
G.add_edge(1, 6)

print(G.nodes())
print(G.edges())

nx.draw(G)

А вот и вывод:

[1, 2, 3, 4, 5, 6]
[(1, 2), (1, 6), (2, 3), (3, 4), (4, 5)]


------------------
(program exited with code: 0)
Press return to continue

Итак, последняя строка не печатается. Изменение его на print(nx.draw(G)) просто добавляет None в конце вывода. Я пытался использовать Geany, VS Code и терминал (Bash), но не могу увидеть график. Что мне делать?

Как я могу просматривать графики без использования Anaconda / Spyder?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Это можно решить, просмотрев график как внешние изображения. Когда график генерируется, его можно просмотреть как изображение в другом окне или сохранить в текущем каталоге.

Необходим подмодуль pyplot из пакета matplotlib импортируется для этого.

Предположим, что график нарисован с использованием nx.draw(graph-name). В Spyder он выведет график автоматически. Но этого не происходит в терминале.

Мы можем просмотреть сгенерированный график с помощью команды plt.show(). Там, где мы импортировали matplotlib.pyplot как plt.

plt.show(), отобразит график в другом окне, но не сохранит копию графика.

Если вы хотите чтобы сохранить копию графика в текущем каталоге, используйте plt.savefig('file-with-extension'). Это сохранит копию графика.

Вот пример:

>>> import networkx as nx
>>> import matplotlib.pyplot as plt
>>> G = nx.graph()
>>> nx.add_path(G, [0, 1, 2, 3])
>>> nx.draw(G, with_labels=1)
>>> plt.show()

в интерпретаторе даст вам это - enter image description here

0 голосов
/ 18 марта 2020

Вы можете использовать matplotlib, вам просто нужно задать параметры nx.draw для осей фигуры matplotlib, например:

import matplotlib.pyplot as plt

def draw_graph(nx_graph):
    fig, axes = plt.subplots(1,1,dpi=72)
    nx.draw(nx_graph, pos=nx.spring_layout(nx_graph), ax=axes, with_labels=True)
    plt.show()

В документах networkx рекомендуется использовать более точные c выделенные инструменты для визуализации графа, но это работает для основ. См .: https://networkx.github.io/documentation/stable/reference/drawing.html

...