我有两个节点之间的连接列表,描述数据集中条目的相似性。
我正在考虑对条目及其连接进行可视化,以显示存在非常相似的条目的集群。
每个元组代表一对非常相似的节点。我为所有这些选择了权重为 1,因为这是必需的,但我希望所有边缘都同样厚。
我已经从
networkx
开始,问题是我现在不知道如何以有用的方式将相似的节点聚集在一起。
我有数据框中的连接列表:
smallSample =
[[0, 1492, 1],
[12, 937, 1],
[16, 989, 1],
[18, 371, 1],
[18, 1140, 1],
[26, 398, 1],
[26, 1061, 1],
[30, 1823, 1],
[33, 1637, 1],
[54, 1047, 1],
[63, 565, 1]]
我按以下方式创建图表:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
for index, row in CC.iterrows():
G.add_edge(CC['source'].loc[index],CC['target'].loc[index], weight =1)
pos = nx.spring_layout(G, seed=7)
nx.draw_networkx_nodes(G, pos, node_size=5)
nx.draw_networkx_edges(G, pos, edgelist=G.edges(), width=0.5)
pos = nx.spring_layout(G, k=1, iterations=200)
plt.figure(3, figsize=(2000,2000), dpi =2)
使用上面提供的小样本,结果如下所示:
我的真实 df 结果由数千个点组成:
如何将链接的节点分组在一起,以便更好地看到每个集群中有多少个节点?我不想让它们重叠得那么厉害,要掌握在大样本中到底有多少个真的不是那么容易。
我曾经使用 networkx + 导出
gml
文件来制作这些图表,以解决您使用名为 Cytoscape 的免费软件询问的问题。它有一堆不同的可视化设置,可以很好地组织节点/边。
使用
nx.write_gml(G, "your_filename.gml")
输出到文件。然后,您可以将该文件导入 Cytoscape 并使用自动布局使节点很好地组织起来。我真的很喜欢Prefuse Force Directed Layout
。然后将最终结果导出到图像以便在您需要的地方使用。
这有点笨重,但我发现这是获得最好看的最终结果的方法。