我有一个带有边缘权重的图表。我环顾四周,发现我可以使用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")
它有效,但它非常多余。此外,如果建议将边缘权重存储在其他结构或其他内容中,请随意评论:)
答案 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"))