我需要从一组数据中创建一个图表。我已经筛选了无数的SO问题,但没有找到一个适合所有必备要求的解决方案。在
需要什么:
http://i.imgur.com/hzQHD07.png
必须具备以下要求:
非常重要的要求:
图形可以是无向或有向的,但应满足上述要求。在
import networkx as nx
g = nx.Graph()
g.add_edge(node1,node3,headlabel='label 2', taillabel='label 1',fontsize='10')
g.add_edge(node1,node4,headlabel='label 4', taillabel='label 3',fontsize='10')
g.add_edge(node2,node5,headlabel='label 6', taillabel='label 5',fontsize='10')
g.add_edge(node2,node6,headlabel='label 8', taillabel='label 7',fontsize='10')
g.add_edge(node4,node5,headlabel='really long label', taillabel='really long label',fontsize='10')
g.add_edge(node4,node5)
g.add_edge(node3,node7)
g.add_edge(node7,node8)
g.add_edge(node7,node8)
g.add_edge(node4,node8)
g.add_edge(node5,node8)
g.add_edge(node5,node9,headlabel='label 12', taillabel='label 11',fontsize='10')
g.add_edge(node6,node9,headlabel='label 10', taillabel='label 9',fontsize='10')
A = nx.to_agraph(g)
A.add_subgraph([node1,node2],rank='same')
A.add_subgraph([node3,node4,node5,node6],rank='same')
A.add_subgraph([node7,node8,node9],rank='same')
A.draw('example2.png', prog='dot')
上面的结果是:http://i.imgur.com/1e9YTnQ.png
当然,用上述方法不会显示平行边。我尝试使用一个支持平行边的多向图,但由于以下错误而无法使其工作,尽管为平行边定义了唯一键(代码中未显示)。在
^{pr2}$使用不带networkx的graphviz,如下所示,我得到了平行边,但是层次结构和节点顺序都没有了。我知道层次结构可以通过在点文件中添加rank=same来修复,但我更喜欢用编程的方式。在
import graphviz as gv
g = gv.Graph(format='png')
g.edge(node1,node3,headlabel='label 2', taillabel='label 1',fontsize='10')
g.edge(node1,node4,headlabel='label 4', taillabel='label 3',fontsize='10')
g.edge(node2,node5,headlabel='label 6', taillabel='label 5',fontsize='10')
g.edge(node2,node6,headlabel='label 8', taillabel='label 7',fontsize='10')
g.edge(node4,node5,headlabel='really long label', taillabel='really long label',fontsize='10')
g.edge(node4,node5)
g.edge(node3,node7)
g.edge(node7,node8)
g.edge(node7,node8)
g.edge(node4,node8)
g.edge(node5,node8)
g.edge(node5,node9,headlabel='label 12', taillabel='label 11',fontsize='10')
g.edge(node6,node9,headlabel='label 10', taillabel='label 9',fontsize='10')
g.render('example')
由于信誉不足,无法发布上次渲染的图像链接。在
目前没有回答
相关问题 更多 >
编程相关推荐