Sco*_*ieB 5 python data-visualization igraph networkx r-qgraph
我想要一个图表,显示几个节点,节点之间的方向箭头表示关系,厚度相对于它们的连接强度。
在 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)
Run Code Online (Sandbox Code Playgroud)
但是在 Python 中我一直无法找到一个明确的例子。NetworkX 和 igraph 似乎暗示这是可能的,但我一直无法弄清楚。
我首先尝试使用 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')
Run Code Online (Sandbox Code Playgroud)
然后,要显示图形,请在终端中运行:
dot -Tpng /tmp/graph.dot > /tmp/graph.png
xdg-open /tmp/graph.png
Run Code Online (Sandbox Code Playgroud)
(或您操作系统上的等价物)
这表现了: