У меня есть два фрейма данных, которые я использую для создания графа с networkx в Python.Кадры данных df1 (координаты узла) и df2 (информация о ребре) выглядят так:
location x y
0 The Wall 145 570
2 White Harbor 140 480
и
location x y
56 The Wall Winterfell 259
57 Winterfell White Harbor 247
Это код, который я реализовал, чтобы попытаться отобразить его:
plt.figure()
G=nx.Graph()
for i, x in enumerate(df1['location']):
G.add_node(x, pos=(df1['x'][i], df1['y'][i]))
for x, x2, w in zip(df2['location'], df2['x'], df2['y']):
G.add_edge(x, x2, weight=w)
plt.figure(figsize=(15,15))
pos = nx.get_node_attributes(G, 'pos')
weights = nx.get_edge_attributes(G, 'weight')
nx.draw(G, pos=pos, node_size=40, with_labels=True, fontsize=9)
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=weights)
plt.show()
Я запускал это пару раз раньше, и, похоже, это сработало, но теперь, после повторного открытия ноутбука jupyter и его повторного запуска, оно не будет работать.У меня в основном две основные проблемы.
- Если я попытаюсь просто запустить строку
nx.draw(G, pos=pos, node_size=40, with_labels=True, fontsize=9)
, мой график будет отображаться, но метки не будут отображаться, даже если для with_labels установлено значение true. - Во-вторых, эта строка
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=weights)
теперь показывает мне ошибку не может умножить последовательность на не-int типа 'float'
Я смотрел на это в течение нескольких часов, и яне могу исправить это, есть мысли?
Редактировать: Я могу заставить ярлыки отображаться, если исключить pos = pos из nx.draw, но это будетне работает, если я включу его