我想可视化我的数据。 我的数据是这样的:我的数据文件是:https://gist.github.com/anonymous/5568836
4556 5092 0.7000
4556 4785 0.7500
4556 5397 0.7000
4556 5139 0.7500
4556 5937 0.8333
4556 6220 0.7000
4556 5139 0.7500
4556 6220 0.7063
4559 4563 0.7500
4559 4770 0.7500
4559 4837 0.7500
4559 5640 0.7500
4559 4563 0.7500
4559 4770 0.7500
4559 4837 0.7500
4559 5640 0.7500
4561 4607 1.0000
4561 4600 0.7500
4561 4562 0.7500
4561 5090 0.7500
4561 5197 1.0000
4561 5182 0.7500
4561 5937 0.7500
4561 6143 0.7500
4561 5632 1.0000
第一个是源节点,第二个是目标节点,第三个是距离。 我已经使用 networkx 来可视化它,我的代码是:
import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
#G=nx.star_graph(800)
filedata1 = open("1.txt",'r')
for line in filedata1:
datas = line.split()
G.add_node(int(datas[0]))
G.add_node(int(datas[1]))
G.add_edge(int(datas[0]),int(datas[1]),weight=float(datas[2]))
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_size=20,node_color='r')
plt.axis('off')
plt.savefig("data.png")
plt.show()
输出是:
同样的数据,我用cytoscape,结果是:
cytoscape 似乎自动对数据进行聚类,所以我可以在 networkx 中看到一些聚类,它完全是一团糟。
我想像细胞空间一样输出,但细胞空间输出有链接,无法设置节点之间的距离。
networkx可以设置节点之间的边距并且只能绘制节点(这就是我想要的),但是布局完全是乱七八糟的,我想显示一些集群:-)
好像cytospace用的是force layout,我在networkx用的是force layout,但是输出完全不一样。
谁能帮帮我?谢谢
最佳答案
如果你可以安装 pydot 或 pygraphviz,你可能会更幸运地使用 graphviz 布局引擎。
例如
import matplotlib.pyplot as plt
import networkx as nx
import urllib
data = urllib.urlopen('https://gist.github.com/anonymous/5568836/raw/abc598d68d8fef980c9701b4bc85f5d10a9f71fa/gistfile1.txt')
G = nx.read_weighted_edgelist(data)
pos=nx.graphviz_layout(G)
nx.draw(G,pos,node_size=20,node_color='r',with_labels=False)
plt.savefig("data.png")
plt.show()
关于python - 如何使用 networkx 或其他东西为我的数据(复杂网络)制作令人满意的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524915/