Python, networkx не рисует граф
По статье на сайте решил нарисовать простой граф с помощью networkX. Делал все по инструкции, но почему-то после выполнения кода ничего не происходит. Автор статьи, как и другие авторы, пишут, что визуализация происходит через matplotlib, но сами почему-то его импортируют, но не используют. В общем, по идее, после выполнения кода должен отрисоваться гарф из 3 ребер, но ничего не отрисовывается, привожу код ниже:
import itertools
import networkx as nx
import numpy.random as rnd
import matplotlib.pyplot as plt
def add_nodes(nodes): # Упрощаем добавление вершин
for i in nodes:
graph.add_node(i)
def add_edge(f_item, s_item, graph):
graph.add_edge(f_item, s_item)
graph.add_edge(s_item, f_item)
graph = nx.Graph()
add_nodes(('A','B','C'))
add_edge('A','B', graph)
add_edge('B','C', graph)
nx.draw_circular(graph,
node_color='red',
node_size=1000,
with_labels=True)
Ответы (1 шт):
Автор решения: Serg Bocharov
→ Ссылка
Просто добавьте в конец строку:
plt.show()
UPDATE. По просьбе в комментарии
import itertools
import networkx as nx
import numpy.random as rnd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('img_avatar_3.png')
def add_nodes(nodes): # Упрощаем добавление вершин
for i in nodes:
graph.add_node(i, image=img)
def add_edge(f_item, s_item, graph):
graph.add_edge(f_item, s_item)
graph.add_edge(s_item, f_item)
graph = nx.Graph()
add_nodes(('A', 'B', 'C'))
add_edge('A', 'B', graph)
add_edge('B', 'C', graph)
pos = nx.circular_layout(graph)
fig = plt.figure(figsize=(5, 5))
ax = plt.subplot(111)
ax.set_aspect('equal')
nx.draw_networkx_edges(graph, pos, ax=ax)
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
trans = ax.transData.transform
trans2 = fig.transFigure.inverted().transform
piesize = 0.2 # this is the image size
p2 = piesize / 2.0
for n in graph:
xx, yy = trans(pos[n]) # figure coordinates
xa, ya = trans2((xx, yy)) # axes coordinates
a = plt.axes([xa - p2, ya - p2, piesize, piesize])
a.set_aspect('equal')
a.imshow(graph.nodes[n]['image'])
a.axis('off')
ax.axis('off')
plt.show()

