用NetworkX/PyGraphviz绘制多重图:节点/边位置的微调

2024-05-16 23:14:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用NetworkX或多或少地复制下面的图(摘自F.Crick,Nature 227561(1970)):

enter image description here

我可以使用MultiDiGraph复制底层图形:

import networkx as nx

g = nx.MultiDiGraph()
weakEdges = [('RNA', 'DNA'), ('RNA', 'RNA'), ('RNA', 'protein')]
strongEdges = [('DNA', 'DNA'), ('DNA', 'RNA'), ('DNA', 'protein')]
g.add_edges_from(weakEdges)
g.add_edges_from(strongEdges)

但显然,内置的matplotlib绘图不支持并行边,因为这是正确的多重图所需要的。在

另一方面,我可以将g转换为PyGraphvizAGraph,并绘制出:

^{pr2}$

enter image description here

这与我想要的非常接近,但我很难弄清楚一些更精细的细节:

  • 使用circo布局,是否可以将“DNA”节点置于图的顶部?如果没有,如何控制每个节点的绝对位置?

  • 如何调整自身边缘(例如“DNA”->;“DNA”边缘)的位置,使其更接近原始图形中的边缘?


Tags: fromnetworkxadd图形节点边缘dnarna
1条回答
网友
1楼 · 发布于 2024-05-16 23:14:22

一个简单的Graphviz/dot语法的小设置(将其输入http://www.webgraphviz.com/并可以看到结果):

digraph X {
{rank=same; RNA Protein}
DNA -> RNA
DNA -> Protein
Protein -> RNA
DNA:n -> DNA:n
}

基本部件如下:

  • :n获取阵列的位置(其他可能是其他风向,包括:nw)。在
  • rank=same;在一行中对齐提到的节点

相关问题 更多 >