多图的线图

时间:2013-08-02 22:08:36

标签: python networkx igraph

我有一个加权定向多图,我想从中制作一个折线图。即,如果在原始多图中的两个边之间存在具有公共节点的有向路径,则由节点替换每个边并连接两个节点。但是,就我而言,我只说两条边之间有一条路径,如果第二条边的重量大于第一条边。

networkx http://networkx.github.io/documentation/latest/reference/generated/networkx.generators.line.line_graph.html中有一个基本折线图算法的实现。但是这不支持多图。

在networkx或igraph中有没有很好的方法呢?

1 个答案:

答案 0 :(得分:1)

igraph解决方案(尚未经过测试,因为我现在没有太多时间) - 假设权重存储在weight边缘属性中:

weights = g.es["weight"]
line_graph_edges = []
for v in xrange(g.vcount()):
    incoming = g.incident(v, mode="in")
    outgoing = g.incident(v, mode="out")
    line_graph_edges.extend((e1, e2) for e1 in incoming for e2 in outgoing
        if weights[e1] < weights[e2])
line_graph = Graph(g.ecount(), line_graph_edges)