图形工具 edge_property 到字符串
Graph-tool edge_property to string
我有一张边权图。我环顾四周,发现我可以使用 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")
它有效,但它很多余。另外,如果建议将边缘权重存储在其他结构或其他东西中,请随时发表评论:)
也许这是一个打字错误,但对 edge_str_weight
的分配应该引用您当前正在使用的边缘 e
:
edge_str_weight[e] = str(i)
除此之外,使用 属性 地图通常是图形工具的最佳选择。如果出于某种原因你想使用一次性 属性-map 只是为了绘图目的,你将再次需要创建一个:
edge_alt_str_weights = g.new_edge_property("string")
for edge in g.edges():
edge_alt_str_weights[edge] = str(edge_weight[edge])
您可能还想将计划保留的 属性 地图定义为 internal,以备不时之需。
原则上,不需要创建不同的 属性,因为将在 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"))
我有一张边权图。我环顾四周,发现我可以使用 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")
它有效,但它很多余。另外,如果建议将边缘权重存储在其他结构或其他东西中,请随时发表评论:)
也许这是一个打字错误,但对 edge_str_weight
的分配应该引用您当前正在使用的边缘 e
:
edge_str_weight[e] = str(i)
除此之外,使用 属性 地图通常是图形工具的最佳选择。如果出于某种原因你想使用一次性 属性-map 只是为了绘图目的,你将再次需要创建一个:
edge_alt_str_weights = g.new_edge_property("string")
for edge in g.edges():
edge_alt_str_weights[edge] = str(edge_weight[edge])
您可能还想将计划保留的 属性 地图定义为 internal,以备不时之需。
原则上,不需要创建不同的 属性,因为将在 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"))