在graph_tool中添加边权重和缩放绘制的边长

时间:2015-03-19 18:16:50

标签: python graph visualization graph-tool

我正在使用graph-tool,我找不到定义边缘权重的方法。如何在图表中添加边权重?

此外,我希望当我使用graph_draw时,图表将根据权重绘制边距。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:9)

您正在寻找Property Maps。来自文档:

  

属性映射是一种将附加信息与顶点,边或图本身相关联的方法。因此有三种类型的属性映射:顶点,边和图。所有这些都由同一个类PropertyMap处理。

属性贴图比简单边缘权重更灵活,因为您可以将任意对象附加到图形节点和边缘,但使用它们将边缘映射到浮点或整数值可以达到相同的效果。

文档中的示例代码:

from itertools import izip
from numpy.random import randint

g = Graph()
g.add_vertex(100)
# insert some random links
for s,t in izip(randint(0, 100, 100), randint(0, 100, 100)):
    g.add_edge(g.vertex(s), g.vertex(t))

vprop_double = g.new_vertex_property("double")            # Double-precision floating point
vprop_double[g.vertex(10)] = 3.1416

vprop_vint = g.new_vertex_property("vector<int>")         # Vector of ints
vprop_vint[g.vertex(40)] = [1, 3, 42, 54]

eprop_dict = g.new_edge_property("object")                # Arbitrary python object.
eprop_dict[g.edges().next()] = {"foo": "bar", "gnu": 42}  # In this case, a dict.

gprop_bool = g.new_edge_property("bool")                  # Boolean
gprop_bool[g] = True

对于问题的第二部分,这里是图表工具drawing and layout documentation,其中包含一些可用于图表显示而不是graph_draw的不同算法。看一下接受边属性映射作为输入参数的算法。我之前没有使用它们,但是在创建布局对象时,传递正确的边缘权重属性贴图应该会为您处理边长缩放。