Визуализация сетевого графика с осью уровней в python (многоуровневая компоновка) - PullRequest
0 голосов
/ 05 июля 2019

Я хочу визуализировать сеть так, чтобы узлы были выровнены по вертикальной оси на основе переменной каждого узла. Это немного сложно объяснить, но вот изображение (низкого качества) What I am looking for

Таким образом, каждый узел имеет значение, и график визуализируется таким образом, что эти значения выравниваются по вертикальной оси. На изображении выше зеленые узлы имеют значение от 0 до 1, синие узлы имеют значение от 1 до 2, желтые узлы имеют значение не менее 2.

Есть какие-нибудь идеи, как я могу добиться этого в Python, если я использую матрицу смежности?

1 Ответ

1 голос
/ 05 июля 2019

Вы можете использовать библиотеку NetworkX для создания своего графика и matplotlib для его отображения.

Как создать простой график:

import networkx as nx

graph = nx.Graph()
graph.add_node('A')
graph.add_node('B')
graph.add_node('C')

graph.add_edge('A', 'B')
graph.add_edge('B', 'C')
graph.add_edge('A', 'C')

Тогда вы можете отобразить это:

import matplotlib.pyplot as plt
plt.figure()
nx.draw(graph, with_labels=False)
plt.show()

Вы также можете изменить вертикальное положение узлов при их рисовании, передав аргумент pos в nx.draw

nx.draw(graph, with_labels=False, pos={'A':(0, 0), 'B':(0,3), 'C':(2,3)})

Проверьте документы по параметрам nx.draw: https://networkx.github.io/documentation/stable/reference/generated/networkx.drawing.nx_pylab.draw_networkx.html#networkx.drawing.nx_pylab.draw_networkx

Не забудьте также установить границы фигуры, используя plt.xlim() и plt.ylim()

...