如何将点图属性添加到最终的dot输出中

12

我在我的Python项目中使用NetworkX库创建图的表示。 制作有向图时,需要向我们的图输出添加一个属性:rankdir=LR。

因此,我编写了以下代码:

import networkx as nx
graph = nx.DiGraph(rankdir="LR")
#adding deps based on our database data
add_deps(graph)
dot_file_path = "some/path/to/dots.gv"

nx.write_dot(graph, dot_file_path)

因此,最后一个字符串会生成包含以下内容的点文件:

strict digraph  {
    "Writing letters"    [URL="/admin/materials/theme/213/",
        shape=box,
        target=blank];
    "Finishing the Business English course"  [URL="/admin/materials/theme/221/",
        color=red,
        shape=box,
        style=filled,
        target=blank];
    "Writing letters" -> "Finishing the Business English course";
    ... 
}

虽然我期望代码在图形输出中附加 "rankdir=LR" 属性:
strict digraph  {
    rankdir=LR;
    "Writing letters"    [URL="/admin/materials/theme/213/",
        shape=box,
        target=blank];
    "Finishing the Business English course"  [URL="/admin/materials/theme/221/",
        color=red,
        shape=box,
        style=filled,
        target=blank];
    "Writing letters" -> "Finishing the Business English course";
    ... 
}

但是这种情况并没有发生,似乎write_dot()方法没有设置图形属性。是否有人能够帮忙提供正确的方法通过networkx添加图形属性?
2个回答

20

这个内容的文档不是很完善。你可以像这样添加默认的“图形”属性:

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_edge(1,2)

In [4]: G.graph['graph']={'rankdir':'LR'}

In [5]: import sys

In [6]: nx.write_dot(G, sys.stdout)
strict digraph  {
    graph [rankdir=LR];
    1 -> 2;
}

对于使用 NetworkX 的新版本(>=2.0)的用户,请使用 drawing.nx_pydot.write_dotdrawing.nx_agraph.write_dot 代替 write_dot - kirogasa

4

AGraph

这是对Aric的有用回答的补充。AGraph没有graph属性,但是使用不带额外'graph'键的graph_attr可以正常工作:

A.graph_attr['rankdir'] = 'LR'

有向图

另外,由于您的有向图可能已经具有一些属性的 .graph['graph'] 键,您可能希望使用 setdefault 而不是直接分配一个新的字典:

G.graph.setdefault('graph', {})['rankdir'] = 'LR'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接