igraph通过EID python设置边宽度

igraph通过EID python设置边宽度,python,igraph,Python,Igraph,这是一个愚蠢的问题,但我在igraph文档中看不到如何做到这一点。我想这将非常简单,但我的python不够好,无法解决这个问题 使用igraph,我正在使用select查找要使用的边。它返回对边对象的引用。当我尝试更改“边宽度”属性时,它不会在绘图中更新 我的代码示例是查找顶点A和B之间的边 source = g.vs.find(name = 'A') sink = g.vs.find(name = 'B') edge = g.es.select(_source = source,

这是一个愚蠢的问题,但我在igraph文档中看不到如何做到这一点。我想这将非常简单,但我的python不够好,无法解决这个问题

使用igraph,我正在使用select查找要使用的边。它返回对边对象的引用。当我尝试更改“边宽度”属性时,它不会在绘图中更新

我的代码示例是查找顶点A和B之间的边

 source = g.vs.find(name = 'A')
 sink   = g.vs.find(name = 'B')
 edge   = g.es.select(_source = source, _target= sink)
 edge["edge_width"] = 20
但是当我绘制图形时,所有的边都是相同的。我做错了什么

编辑:为了简化操作,下面是生成问题的完整代码示例。它只需创建一个包含5个节点的图形,a到E,彼此完全连接,并将其绘制到屏幕上

import string
import igraph as ig

num_nodes = 5

alpha_list = list(string.ascii_uppercase)
alpha_list = alpha_list[:num_nodes]

g = ig.Graph()
g.add_vertices(alpha_list)

for x in range (0, num_nodes + 1):
    for y in range (x, num_nodes):
        print "x: "+str(x)+", y: "+str(y)
        if (x != y):
            g.add_edge(x, y)

g.vs["label"] = g.vs["name"]

source = g.vs.find(name = 'A')
sink   = g.vs.find(name = 'B')

edge = g.es.select(_source = source, _target= sink)

edge["edge_width"] = 20

print edge.attributes()

layout = g.layout("circle")
ig.plot(g, layout = layout)

我仍然无法找到一种简单的方法来查找和更改单个边缘的可视属性,但我成功地使用了这段代码片段(经过多次尝试和错误)


当你想更新一大堆边的时候,这很好,但当我只想更新一两条边的时候,这看起来很笨拙。尽管如此,它仍然有效。嘿。

它们实际上是两种设置单条边“宽度”属性的方法:

如果我理解了您的问题,您希望在创建图形后更新此属性

您可以按如下方式执行此操作:

# get index of edge between vertices "A" and "B"
edge_index = g.get_eis("A", "B")
# set width attribute to 20
g.es[edge_index] = 20
否则,为什么不在构建图形时指定它呢? 您只需要将width关键字arg添加到“add_edge”函数中。以下是以这种方式修改的建筑回路:

for x in range (0, num_nodes + 1):
    for y in range (x, num_nodes):
        print "x: "+str(x)+", y: "+str(y)
        if (x != y):
            # setting width 20 for "A" and "B"
            w = 20 if (x==0 and y==1) else 1
            g.add_edge(x, y, width=w)

希望这有帮助;)

您在示例中使用的是
edge\u width
属性;您应该使用
width
,正如您在更新的答案中正确地做的那样。如果您的名字是字符串,您可以简单地使用
g.get\u eid(start\u name,end\u name)
。只要igraph需要顶点ID,如果名称都是字符串,它通常会接受顶点的名称。
for x in range (0, num_nodes + 1):
    for y in range (x, num_nodes):
        print "x: "+str(x)+", y: "+str(y)
        if (x != y):
            # setting width 20 for "A" and "B"
            w = 20 if (x==0 and y==1) else 1
            g.add_edge(x, y, width=w)