所以我创建了一种非常朴素的(可能效率低下)方法来生成哈斯图。
问题:
我有4个维度...p
q
r
s
。
我想以统一的方式显示它(四维立方体),但我不知道如何重新塑造它。 如何在Python中调整networkx图形的形状?
我看到有些人使用spring_layout()
和draw_circular()
的示例,但它们的形状不是我要找的那种均匀的形状。
是否有一种方法可以重新塑造我的图形并使其均匀? (即将我的哈斯图重塑成一个四维立方体形状(最好使用nx.draw()
)
这是我的哈斯图的当前外观:
这是生成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()
我希望将其改造成这样:
如果有人知道更简便的制作哈斯图方式,请分享一些经验,但这不是本文的主要目的。
shell_layout
中的k
值,您可以获得一个不那么堆积的图形。使用0.48的值,我得到了一些可读性,但并不是非常接近您的期望。 - Cyrbil