【发布时间】:2019-04-13 13:26:15
【问题描述】:
我想使用 NetworkX 或多或少地重现下图(来自 F. Crick, Nature 227, 561 (1970)):
我可以使用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 转换为 PyGraphviz AGraph 并绘制:
a = nx.nx_agraph.to_agraph(g)
for etup in weakEdges:
a.get_edge(*etup).attr['style'] = 'dashed'
a.draw('test2.png', prog='circo')
这与我想要的非常接近,但我无法弄清楚一些更精细的细节:
使用
circo布局,是否可以将“DNA”节点置于图顶部的中心?如果不是,如何控制每个节点的绝对位置?如何调整自身边缘(例如“DNA”->“DNA”边缘)的位置,使其更接近原始图中的位置?
【问题讨论】:
标签: python networkx graph-theory graphviz pygraphviz