Я работаю над примером графа Erdos Renyi с объектами классов, связанными с узлами Как использовать пользовательский объект класса в качестве узла networkx? в Networkx.Сначала создается пустой график.Затем я создаю 4 узла и сопоставляю данные (объект класса) с ним.Это позволяет мне иметь доступ к атрибутам объекта класса, выполнив это G.node [0] ['data']. X
, как объяснено в Как использовать пользовательский объект класса какузел networkx? .
Код объекта класса взят из: https://pythonprogramming.net/many-blob-objects-intermediate-python-tutorial/
Код выглядит так:
import pygame
import random
import networkx
from matplotlib import pyplot as plt
from scipy.stats import bernoulli
STARTING_BLUE_BLOBS = 10
STARTING_RED_BLOBS = 3
WIDTH = 800
HEIGHT = 600
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
def Erdos_Renyi_gr(Bglob,p):
Gcons = nx.Graph()
#add nodes
for i in range(4):
Gcons.add_node(i, data = Bglob[i])
for node1 in Gcons.nodes():
for node2 in Gcons.nodes():
if node1 < node2 and bernoulli.rvs(p=p):
Gcons.add_edge(node1,node2)
return Gcons
class Blob:
def __init__(self, color):
self.x = random.randrange(0, WIDTH)
self.y = random.randrange(0, HEIGHT)
self.size = random.randrange(4,8)
self.color = color
def main():
blue_blobs = dict(enumerate([Blob(BLUE) for i in
range(STARTING_BLUE_BLOBS)]))
red_blobs = dict(enumerate([Blob(RED) for i in
range(STARTING_RED_BLOBS)]))
Gb = Erdos_Renyi_gr(blue_blobs,0.5)
nx.write_gexf(Gb, 'quaker_network.gexf')
nx.draw(Gb, with_labels=True)
plt.draw()
plt.show()
if __name__ == '__main__':
main() `
Проблема в том, чтони одна из команд «записи», которая хранит граф Networkx в формате, который будет открыт в Gephi, не работает для этого графа.Я предполагаю, что ошибка в основном связана с данными, связанными с моими узлами, поскольку ошибка говорит:
KeyError: <class '__main__.Blob'>
Полная трассировка стека ошибок выглядит примерно так:
runfile('G:/Bolbclassy.py')
Traceback (most recent call last):
File "<ipython-input-2-03d6a2a74cde>", line 1, in <module>
runfile('G:/Bolbclassy.py', )
File "C:Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py",
line 705, in runfile
execfile(filename, namespace)
File "C:Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py",
line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "G:/Bolbclassy.py", line 55, in <module>
main()
File "G:/Bolbclassy.py", line 49, in main
nx.write_gexf(Gb, 'quaker_network.gexf')
File "<decorator-gen-571>", line 2, in write_gexf
File "C:Anaconda3\lib\site-packages\networkx\utils\decorators.py", line
227, in _open_file
result = func_to_be_decorated(*new_args, **kwargs)
File "C:Anaconda3\lib\site-packages\networkx\readwrite\gexf.py", line 88,
in write_gexf
writer.add_graph(G)
File "C:Anaconda3\lib\site-packages\networkx\readwrite\gexf.py", line 305,
in add_graph
self.add_nodes(G, graph_element)
File "C:Anaconda3\lib\site-packages\networkx\readwrite\gexf.py", line 340,
in add_nodes
node_data, default)
File "C:Anaconda3\lib\site-packages\networkx\readwrite\gexf.py", line 436,
in add_attributes
attr_id = self.get_attr_id(make_str(k), self.xml_type[val_type],
KeyError: <class '__main__.Blob'>
Любые идеи, какэто можно исправить?
Спасибо,