Создание диаграммы взаимосвязи данных с использованием networkx и matplotlib - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь нарисовать диаграмму взаимосвязи данных.Я смоделировал свои входные данные в тройках (субъект, предикат, объект), например (приложение, «потребляет», объект), (приложение, «мастер», объект) и т. Д. Каждая тройка - это ребро и 2 узла.Я хочу также раскрасить разные наборы узлов разными цветами.Я борюсь с установкой атрибута цвета, а также сохранением графика в png-файл с размером, доступным для чтения

Вот код:

G = nx.DiGraph ()

чтение входных данных из файла ипроцесс - списки узлов и ребер ...... добавить узлы - установить цвет различий для каждого набора узлов ??

G.add_nodes_from (list(entities), node_color='yellow')
G.add_nodes_from (list(sornodes))
G.add_nodes_from (list (consumernodes))

добавить ребра - установить цвет различий для каждого набора ребер (каксделать это?)

G.add_edges_from (masters)
G.add_edges_from (consumers)
G.add_edges_from (ads)

pos = nx.spring_layout(G) 

nx.draw_networkx_nodes(G, pos, node_size=1700)
nx.draw_networkx_edges (G, pos, arrow=True)
nx.draw_networkx_labels (G, pos)
nx.draw_spring (G)

plt.figure(figsize=(7.195, 3.841))
fig1 = plt.gcf()
fig1.savefig ('out.png', dpi=1000)
plt.show ()

В файле нет изображения.plt.show открывает график в новом окне, а также открывается другое пустое окно.Я запускаю это из оболочки Bash.Закрытие обоих окон изображений завершает программу.

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

Думаете, кто-нибудь?

1 Ответ

0 голосов
/ 07 июня 2018

draw_networkx_nodes (...) не похоже на множественные вызовы с разными наборами узлов и разными цветами для каждого набора.Он использует последний цвет, указанный для всех узлов на графике.Решение состоит в том, чтобы вызвать draw_networkx_nodes один раз и передать список с цветами для каждого узла и список len, равный количеству узлов.

# s, c and a are 3 lists of nodes

for x in s:
    nodes.append(x)
    nodecolor.append('r')
for x in c:
    nodes.append(x)
    nodecolor.append('g')
for x in a:
    nodes.append(x)
    nodecolor.append('y')

G.add_nodes_from(nodes)
nx.draw_networkx_nodes(G, pos, node_color=nodecolor, node_size=1700)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...