networkx节点顺序 - 垂直打印graphviz布局

0 投票
1 回答
1994 浏览
提问于 2025-04-18 12:33

我创建了一个图形布局,使用了Graphviz这个工具。我还尝试过用不同的绘图风格来画图,比如随机、圆形、壳层、谱系和弹簧。我觉得Graphviz最能准确反映我的数据。我制作了一个文件,里面有两列字符串,这些字符串代表了边(每个字符串至少有一个对应的伙伴,这就是我认为Graphviz布局最能代表这些数据的原因)。从这个文件中,我创建了一个独特字符串的列表,作为节点。然后我把这些节点画出来,并添加了边。我的脚本的一个版本可以在这里找到:(networkx - 根据列表或字典值改变节点大小)

这是使用Graphviz布局的输出(这里的大小是原来的100乘以10,有些数字高达15020,有些则小到10):

enter image description here

这是使用随机布局的输出:

enter image description here

我们能否得出结论,Graphviz示例中所有应该存在的边都存在?可以说较小的节点“在”较大的节点上面是连接的吗?有没有办法让它们的边可见?在随机示例中,是否因为节点的随机放置,导致有更多的边可见,从而边的“长度”可以更长?

如果我认为的没错,Graphviz是我数据的最佳绘图选项,因为节点和边之间有很多重叠(如果那些“在”较大节点上的节点确实是连接的),我想做的是把图按“垂直”方式排序。也就是说,把最大的节点和最多边的放在上面,往下排列到只有1条边的节点。我尝试过改变整体图形的大小,但并没有让图形更清晰。不知道为什么,我得到了一个原始窗口显示图形,还有一个灰色空白背景的二级窗口。

所以,我开始觉得我的一些假设是正确的。这是我能做的最大尺寸的图像:

enter image description here

1 个回答

0

发生的情况是,networkx把节点画在边的上面。所以边是在节点下面画的。

我觉得最简单的办法让你还能看到边,就是在draw命令里设置alpha=0.5,或者其他小于1的值,这样节点就会变得半透明。

撰写回答