最近我问过问题How to represent graphs with ipython。答案正是我所寻找的,但今天我正在寻找一种方法来显示最终图片的边缘估值。
边缘评估添加如下:
import networkx as nx
from nxpd import draw # If another library do the same or nearly the same
# output of nxpd and answer to the question, that's
# not an issue
import random
G = nx.Graph()
G.add_nodes_from([1,2])
G.add_edge(1, 2, weight=random.randint(1, 10))
draw(G, show='ipynb')
结果就在这里。
我阅读了help
的{{1}}(没有看到任何网络文档),但我没有找到任何内容。
有没有办法打印边缘值?
编辑:另外,如果有办法提供格式化功能,这可能会很好。例如:
nxpd.draw
EDIT2 :如果有另一个库而不是nxpd执行几乎相同的输出,那么这不是问题
EDIT3 :必须使用def edge_formater(graph, edge):
return "My edge %s" % graph.get_edge_value(edge[0], edge[1], "weight")
答案 0 :(得分:1)
如果您查看source nxpd.draw
(函数draw_pydot
)调用to_pydot
,它会过滤图形属性,如:
if attr_type == 'edge':
accepted = pydot.EDGE_ATTRIBUTES
elif attr_type == 'graph':
accepted = pydot.GRAPH_ATTRIBUTES
elif attr_type == 'node':
accepted = pydot.NODE_ATTRIBUTES
else:
raise Exception("Invalid attr_type.")
d = dict( [(k,v) for (k,v) in attrs.items() if k in accepted] )
如果您查找pydot
,则会发现包含有效Graphviz属性的pydot.EDGE_ATTRIBUTES
。如果我记得,weight
严格地通过Graphviz引用边缘权重,而label
可能是您需要的属性。尝试:
G = nx.Graph()
G.add_nodes_from([1,2])
weight=random.randint(1, 10)
G.add_edge(1, 2, weight=weight, label=str(weight))
请注意,我无法测试它是否有效,如果没有,则只能进行下调。