Перестановка узлов и ребер в графе в networkx - PullRequest
0 голосов
/ 07 мая 2020

Я построил график ниже, используя спектральную схему networkx (Python). Похоже, тот же граф можно преобразовать в трехмерный куб, где иерархические отношения будут более четкими. Все нижние индексы «orth» могут находиться на одном плане, то есть ниже, чем все нижние индексы «lex» (которые сами находятся на одном плане); это ниже, чем все указанные в нижнем индексе "sem" (которые также занимают ту же плоскость).

У меня два вопроса: есть ли какие-либо схемы построения графиков, которые сделали бы иерархический характер очевидным? Если описанная выше плоская структура выполняет эту работу, как мне ее реализовать?

Код ниже:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()


edges = [('$x_{orth}$', '$e_{orth}$'),\
     ('$r_{orth}$', '$e_{orth}$'),\
     ('$e_{orth}$', '$y_{lex}$'),\
     ('$r_{lex}$', '$x_{orth}$'), \
     ('$y_{lex}$', '$r_{orth}$'), \
     ('$y_{lex}$', '$x_{lex}$'), \
     ('$y_{lex}$', '$y_{lex}$'),\

     ('$x_{lex}$', '$e_{lex}$'),\
     ('$r_{lex}$', '$e_{lex}$'),\
     ('$e_{lex}$', '$y_{sem}$'),\
     ('$r_{sem}$', '$x_{lex}$'), \
     ('$y_{sem}$', '$r_{lex}$'), \
     ('$y_{sem}$', '$x_{sem}$'), \
     ('$y_{sem}$', '$y_{sem}$'), \

     ('$x_{sem}$', '$e_{sem}$'),\
     ('$r_{sem}$', '$e_{sem}$'),\
     ('$e_{sem}$', '$y_{mng}$'),\
     ('$y_{mng}$', '$r_{sem}$'), \
     ('$y_{mng}$', '$y_{mng}$')]

G.add_edges_from(edges)


# separate calls to draw nodes and edges
pos = nx.spectral_layout(G)
nx.draw_networkx_nodes(G, pos,node_size = 500)
nx.draw_networkx_labels(G, pos)
nx.draw_networkx_edges(G, pos, edgelist=edges, edge_color='black', arrows=True)
plt.show()
enter code here

enter image description here

...