Python: igraph - 将 vertexseq none 值设置为特定值

Python: igraph - set vertexseq none value to a specific one

我想了解更多关于 igraph 库的信息。我想制作一个简单的图表,其中两个节点在不同时间标记。在 igraph tutorial 中,我发现在生成图形后完全可以标记列表。它适用于代码:

from igraph import *

p = Graph()
p.add_vertices(1)
p.vs["label"] = ["test", "test1"]
layout = p.layout("kk")
plot(p, layout=layout)

但是,如果我想一步一步地标记图表呢?这意味着我首先要添加一些顶点然后标记它。然后执行一些计算添加一些其他顶点并在我添加它之后标记另一个顶点而不会丢失第一个顶点。我只是用下面的代码试了一下,但由于某种原因它不能按我想要的那样工作。我该如何解决?

from igraph import *

p = Graph()
p.add_vertices(1)
p.vs["label"] = ["test"]

p.add_vertices(1)
p.vs["label"][1] = "test1"
layout = p.layout("kk")
plot(p, layout=layout)

g.vs["label"][1] = "test1" 本质上可以归结为:

labels = g.vs["label"]
labels[1] = "test1"

现在,g.vs["label"]提取所有顶点的label属性,构造一个Python列表,将属性填充到列表中,然后returns列表给你。如果你 运行 type(g.vs["label"]),你可以看到 labels 是一个普通的 Python 列表。由于它不是内部数据结构的 视图,因此您对列表所做的任何修改都不会反映在图形本身中。

另一方面,g.vs[1]["label"] = "test1"会做这样的事情:

vertex = g.vs[1]
vertex["label"] = "test1"

这会起作用,因为 g.vs[1] 是一个 Vertex 对象(您可以使用 type(g.vs[1]) 检查它,并且使用 Vertex 对象作为字典将更新基础属性。


脚注:理论上,g.vs["label"] 可以 return某种代表"label" 每个顶点的属性,并将任何更改写回基础图形。然而,它在早期版本的 igraph Python 接口中并没有以这种方式实现,我们现在不能更改它,否则可能会破坏依赖于 g.vs["label"] return 的人的代码复制.