首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用EID python设置图像的边缘宽度

用EID python设置图像的边缘宽度
EN

Stack Overflow用户
提问于 2014-05-20 15:00:12
回答 2查看 1.5K关注 0票数 1

这是一个愚蠢的问题,但我只是不知道如何在照片文档中这样做。我想这将非常简单,但我的python还不够好,无法解决它。

使用igraph,我找到了我想要玩的边缘使用select。它返回对边缘对象的引用。当我试图更改edge_width属性时,它不会在图中被更新。

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

代码语言:javascript
复制
 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完全连接在一起,然后将其绘制到屏幕上。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-20 17:07:09

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

代码语言:javascript
复制
# 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

虽然这是伟大的,当你想要更新一个整体的边缘,它似乎荒谬地笨重,当我只是想更新一两个。尽管如此,它还是起作用了。

票数 2
EN

Stack Overflow用户

发布于 2015-12-17 18:56:47

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

如果我理解了您的问题,您希望在创建了图表之后更新这个属性。

您可以这样做:

代码语言:javascript
复制
# 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“函数中即可。下面是以这种方式修改的建筑循环:

代码语言:javascript
复制
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)

希望这会有所帮助;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23763382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档