igraph到达边界框的最边缘

2 投票
2 回答
1736 浏览
提问于 2025-04-17 13:32

我在用Python学习igraph的例子时,遇到了一个问题。

Kautz, zealously cropped

最外面的节点部分超出了边框。那个例子就没有这么严重的问题。

(另外,在我的图中,似乎为双向连接画了额外的线,而在例子中只是每边画了一个箭头。如果这个问题好解决,请告诉我。)

我的代码是从例子页面复制过来的,下面是代码。

g = Graph.Kautz(m=3, n=2)
adj = g.get_adjacency()
fig.add(g, layout="fr", vertex_label=None)
fig.add(adj, bbox=(360, 0, 480, 120), grid_width=0, opacity=0.7)
fig.show()

我的安装信息在这里。

No configuration file, using defaults
igraph 0.6 running inside Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2

如果能得到任何帮助,我会非常感激!

2 个回答

3

经过一天的文档搜索,我终于找到了一个解决方案。现在我用的是

graph.layout().fit_into(bbox=(<size>, <size>))

而不是使用 igraph.Plot() 和 plot.add(graph),

igraph.plot(graph, bbox=(<size>, <size>))

另外,我还解决了关于曲线边的问题。

graph.es["curved"] = 0

谢谢大家关注这个问题,希望我的经验能帮到你们!

6

曲线边缘是在文档中那个图形制作之后才被引入到igraph的图形绘制工具里的,所以你在文档的图形中没有看到曲线边缘也是这个原因。无论如何,曲线边缘是可以很容易地关闭的:

graph.es["curved"] = False

或者

plot(graph, edge_curved=False)

至于那些不适合边界框的边缘:plot()函数(这是一个快速绘图的单次函数)有一个margin参数,可以在图形周围加上一个白色的边距;这实际上是通过将图形的边界框缩小一定的像素数来实现的,以确保边缘大部分时间都能保持在里面。当你直接使用plot类构建自己的图形时,你需要自己添加边距:

bbox = BoundingBox(600, 600)
figure = Plot(bbox=bbox)
bbox = bbox.contract(20)
figure.add(graph, bbox=bbox, layout=layout)
figure.show()

内置的plot函数和Plot类之间的另一个区别是,plot函数默认会添加一个白色背景,而Plot则使用透明背景。你可以通过使用Plot构造函数的background参数来覆盖这个设置。

撰写回答