Итак, я создал действительно наивный (возможно, неэффективный) способ генерации диаграмм Hasse.
Вопрос:
У меня есть 4 измерения... p
q
r
s
.
Я хочу показать его равномерно (tesseract), но я не знаю, как его изменить. Как можно изменить график сети в Python?
Я видел несколько примеров людей, использующих spring_layout()
и draw_circular()
, но он не формируется так, как я ищу, потому что они не являются однородными.
Есть ли способ изменить свой график и сделать его однородным? (т.е. изменить мою диаграмму hasse в форму tesseract (предпочтительно используя nx.draw()
)
Вот то, что сейчас выглядит:
Здесь мой код для генерации диаграммы hasse из N измерений
#!/usr/bin/python
import networkx as nx
import matplotlib.pyplot as plt
import itertools
H = nx.DiGraph()
axis_labels = ['p','q','r','s']
D_len_node = {}
#Iterate through axis labels
for i in xrange(0,len(axis_labels)+1):
#Create edge from empty set
if i == 0:
for ax in axis_labels:
H.add_edge('O',ax)
else:
#Create all non-overlapping combinations
combinations = [c for c in itertools.combinations(axis_labels,i)]
D_len_node[i] = combinations
#Create edge from len(i-1) to len(i) #eg. pq >>> pqr, pq >>> pqs
if i > 1:
for node in D_len_node[i]:
for p_node in D_len_node[i-1]:
#if set.intersection(set(p_node),set(node)): Oops
if all(p in node for p in p_node) == True: #should be this!
H.add_edge(''.join(p_node),''.join(node))
#Show Plot
nx.draw(H,with_labels = True,node_shape = 'o')
plt.show()
Я хочу изменить его следующим образом:
Если кто-нибудь знает более простой способ сделать диаграммы Хассе, пожалуйста, поделиться некоторой мудростью, но это не главная цель этого поста.