5

我想要一个显示几个节点的图表,节点之间的方向箭头代表一种关系,其厚度与它们的连接强度有关。

在 R 中,这非常简单

library("qgraph")
test_edges <- data.frame(
   from = c('a', 'a', 'a', 'b', 'b'),
   to = c('a', 'b', 'c', 'a', 'c'),
   thickness = c(1,5,2,2,1))
qgraph(test_edges, esize=10, gray=TRUE)

产生: 通过 R 强制有向图

但是在 Python 中,我找不到一个明确的例子。NetworkX 和 igraph 似乎暗示这是可能的,但我无法弄清楚。

4

1 回答 1

7

我首先尝试使用 NetworkX 的标准绘图函数来执行此操作,它使用 matplotlib,但我不是很成功。

但是,NetworkX 也支持将支持边缘权重的格式绘制为dot属性penwidth

所以这里有一个解决方案:

import networkx as nx

G = nx.DiGraph()
edges = [
    ('a', 'a', 1),
    ('a', 'b', 5),
    ('a', 'c', 2),
    ('b', 'a', 2),
    ('b', 'c', 1),
    ]
for (u, v, w) in edges:
    G.add_edge(u, v, penwidth=w)

nx.nx_pydot.write_dot(G, '/tmp/graph.dot')

然后,要显示图表,请在终端中运行:

dot -Tpng /tmp/graph.dot > /tmp/graph.png
xdg-open /tmp/graph.png

(或您的操作系统上的等效项)

这表明:

OP 描述的图形的输出

于 2016-08-13T08:25:01.487 回答