首页 > 解决方案 > 如何使用python可视化一个节点分为2个集群的图,集群之间和集群内应该存在边?

问题描述

我想生成一个看起来与此类似的图表。

在此处输入图像描述

但是对于我的代码,我得到了如下图

在此处输入图像描述

我通过导入graphviz输入了以下代码。我请求有人帮助我对其进行更改以获取所需的代码。

from graphviz import Graph

g = Graph('G', filename='cluster.gv')
a=['1','2','3','4']
b=['5','6','7','8']

with g.subgraph(name='cluster_0') as c:
    c.attr(color='lightgrey')
    c.node_attr.update(style='filled', color='red')
    for i in a:
        c.node(str(i),shape='circle')
    c.attr(label='partition #1')

with g.subgraph(name='cluster_1') as c:
    c.attr(color='lightgrey')
    c.node_attr.update(style='filled', color='blue')
    for i in b:
        c.node(str(i),shape='circle')
    c.attr(label='partition #2')

g.edge('1','5')
g.edge('1','3')
g.edge('2','7')
g.edge('5','8')
g.view()

提前致谢

标签: pythongraphcluster-computingnetworkxgraphviz

解决方案


  • 我不使用 Python api,所以我不知道它是否会支持我的建议。
  • “相似”是一个非常宽松的要求。
  • 也就是说:
    Graphviz 允许您显式设置节点位置(请参阅此处https://graphviz.org/faq/#FaqDotWithNodeCoords)。如果您想要组合成椭圆形的椭圆形集合,您可以这样做。请注意,“pos”值以磅为单位,而节点大小以英寸为单位!

这个程序:

digraph ovaltest {
 graph [splines=line]

  node [color=red shape=box style=rounded height=.2 width=.2  ]
   p1_1 [pos="70,95" ]
   p1_2 [pos="120,95" ]
   p1_3 [pos="170,95" ]
   p1_4 [pos="220,95" ]
   p2_1 [pos="70,70" ]
   p2_4 [pos="220,70" ]
   p3_1 [pos="70,45" ]
   p3_4 [pos="220,45" ]
   p4_1 [pos="70,20" ]
   p4_2 [pos="120,20" ]
   p4_3 [pos="170,20" ]
   p4_4 [pos="220,20" ]
  node [color=blue shape=box style=rounded height=.2 width=.2  ]
   q1_1 [pos="350,95" ]
   q1_2 [pos="400,95" ]
   q1_3 [pos="450,95" ]
   q2_1 [pos="350,70" ]
   q2_3 [pos="450,70" ]
   q3_1 [pos="350,45" ]
   q3_3 [pos="450,45" ]
   q4_1 [pos="350,20" ]
   q4_2 [pos="400,20" ]
   q4_3 [pos="450,20" ]

  p2_1 -> p3_4 [dir="none"]
  p2_4 -> q1_2 [dir="none"]
  p2_4 -> q3_3 [dir="none"]
  p4_4 -> q4_1 [dir="none"]
}

这个命令行:
neato -n -Tpng yourfile.gv >yourfile.png

生成此图:

在此处输入图像描述


推荐阅读