Почему ребра, хранящиеся в графе networkx, автоматически перемещаются не по порядку? - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь визуализировать определенный тип c графа, который имеет 3 различных типа цвета краев в зависимости от того, откуда взяты данные для краев. Проблема в том, что я хочу оживить этот процесс, поэтому для этого мне нужно добавлять по одному краю за раз, но я хочу, чтобы цвет края был предопределен, так что мне не нужно l oop через весь мой график каждый раз, когда я хочу обновить рисунок графика.

Я решил эту проблему, создав второй график с теми же данными, что и первый, вне функции зацикленной анимации, с теми же данными и цветами, связанными с каждым значением, который будет использоваться в качестве легенды.

coGraph = nx.Graph()
coGraph.add_nodes_from(nodeArr)
coGraph.add_edges_from(inputD)
coGraph.add_edges_from(transC)
coGraph.add_edges_from(transFin)

colors = []
for edge in coGraph.edges():
    print(str(edge))
    if [edge[0], edge[1]]in inputD:
        colors.append('black')
    elif [edge[0], edge[1]] in transC:
        colors.append('red')
    elif [edge[0], edge[1]] in transFin:
        colors.append('purple')

    ani1 = matplotlib.animation.FuncAnimation(fig, updateDT, None, fargs = (transC, transFin,inGraph, pos, colors),
                                         interval = 10, repeat = True, blit = False)

Но по какой-то причине, когда я печатаю края указанного графа или только цвета, он полностью выходит из введенного порядка. inputD, trans C и transFin - это все документы, содержащие строки кортежей. Есть ли способ ввести данные в временный график и сохранить его порядок?

1 Ответ

1 голос
/ 28 мая 2020

Тип фоновых данных для networkx - словарь. Как правило, нет никакой гарантии порядка, заданного словарем. Но в самых последних версиях Python есть.

Для решения этой проблемы python имеет OrderedDict, и аналогично теперь networkx имеет OrderedGraph (и другие варианты). здесь .

...