图表工具edge_property为字符串

时间:2015-09-24 20:10:50

标签: python graph-tool

我有一个带有边缘权重的图表。我环顾四周,发现我可以使用edge_properties来表示边缘权重。我是这样做的:

edge_weight = g.new_edge_property("double")

for i in range(10):
    e = g.add_edge(i, i+1)
    edge_weight[e] = i

现在我想用边缘上给定的边缘权重打印一个图形。你有什么想法怎么做?我唯一可以提出的是:

edge_weight = g.new_edge_property("double")
edge_str_weight = g.new_edge_property("string")

for i in range(10):
    e = g.add_edge(i, i+1)
    edge_weight[e] = i
    edge_str_weight[e] = str(i)

graph_draw(g, edge_text=edge_str_weight, output="out.png")

它有效,但它非常多余。此外,如果建议将边缘权重存储在其他结构或其他内容中,请随意评论:)

2 个答案:

答案 0 :(得分:1)

也许这是一个错字,但edge_str_weight的作业应该引用您目前正在使用的边缘e

edge_str_weight[e] = str(i)

除此之外,使用属性贴图通常是图形工具的最佳选择。如果由于某种原因你想要使用一次性属性地图只是为了绘图目的,你将再次需要创建一个:

edge_alt_str_weights = g.new_edge_property("string")
for edge in g.edges():
    edge_alt_str_weights[edge] = str(edge_weight[edge])

您可能还希望将您计划保留的属性映射定义为internal,以防您想要持久使用它们。

答案 1 :(得分:1)

原则上,不需要创建不同的属性,因为将在graph_draw()内转换为字符串。但是,graph-tool默认使用十六进制浮点表示法,因为它允许完美表示。这非常适合将值存储在文件中,但不能用于显示它们。因此,您的方法是正确的。您可以使用map_property_values()

更简洁有效地完成这项工作
label = g.new_edge_property()
map_property_values(edge_weight, label, lambda w: str(w))

graph_draw(g, edge_text=label, output="out.png"))