这是一个愚蠢的问题,但我只是不知道如何在照片文档中这样做。我想这将非常简单,但我的python还不够好,无法解决它。
使用igraph,我找到了我想要玩的边缘使用select。它返回对边缘对象的引用。当我试图更改edge_width属性时,它不会在图中被更新。
我的代码示例是寻找顶点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)发布于 2014-05-20 17:07:09
我仍然无法找到一种简单的方法来查找和更改单个边缘的可视属性,但我处理了这个代码片段(经过多次尝试和错误)。
# Start a list of all edge widths, defaulted to width of 3
widths = [3] * len(g.es)
# Find edge ID
start_vertex = g.vs.find(name = start_name).index
end_vertex = g.vs.find(name = end_name).index
edge_index = g.get_eid(start_vertex, end_vertex)
# Change the width for the edge required
widths[edge_index] = 20
# Update the graph with the list of widths
g.es['width'] = widths虽然这是伟大的,当你想要更新一个整体的边缘,它似乎荒谬地笨重,当我只是想更新一两个。尽管如此,它还是起作用了。
发布于 2015-12-17 18:56:47
它们实际上是设置单个边缘“宽度”属性的两种方法:
如果我理解了您的问题,您希望在创建了图表之后更新这个属性。
您可以这样做:
# 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否则,为什么不在构建图形时指定它呢?只需将宽度关键字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)希望这会有所帮助;)
https://stackoverflow.com/questions/23763382
复制相似问题