如何使用像outptut

时间:2015-05-12 09:18:23

标签: python graph networkx

最近我问过问题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')

结果就在这里。

Result provided by ipython notebook

我阅读了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")

1 个答案:

答案 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))

请注意,我无法测试它是否有效,如果没有,则只能进行下调。