generate_network_text#

generate_network_text(graph, with_labels=True, sources=None, max_depth=None, ascii_only=False, vertical_chains=False)[source]#

生成“网络文本”格式的线条

这通过深度优先遍历图并在遇到每个唯一节点时写入一行来实现。非树边写在每个节点的右侧,并通过省略号指示与非树边的连接。这种表示方法在输入图是森林时效果最佳,但任何图都可以表示。

这种表示法是networkx原创的,尽管它足够简单,可能在现有文献中已知。详情请参见#5602。该过程总结如下:

  1. 给定一组源节点(可以指定,或通过找到(强)连通分量并从每个分量中选择一个度数最小的节点来自动发现),我们以深度优先顺序遍历图。

  2. 每个可到达的节点将仅在其自己的行上打印一次。

  3. 边以四种方式之一表示:

    1. 父节点“L形”连接在左上角。这对应于有向DFS树中的遍历。

    2. 直接显示在右侧的回溯“<-形”连接。对于有向图,这些是为指向节点的任何非父边绘制的。对于无向图,这些仅绘制已表示的非父边(未表示的边将在递归情况下处理)。

    3. 子节点“L形”连接在右下角。子节点的绘制是递归处理的。

    4. 如果 vertical_chains 为真,并且父节点只有一个子节点,则在它们之间绘制“垂直形”边。

  4. 每个节点的子节点(相对于有向DFS树)绘制在其下方和右侧。如果子节点已绘制,则连接替换为省略号(“…”)以指示有一个或多个连接在其他地方表示。

  5. 如果指定了最大深度,则到超过此深度的节点的边将用省略号表示。

  6. 如果节点的“collapse”值为真,则我们不遍历该节点。

Parameters:
graphnx.DiGraph | nx.Graph

要表示的图

with_labelsbool | str

如果为True,将使用节点的“label”属性显示(如果存在),否则将使用节点值本身。如果给定为字符串,则将使用该属性名称而不是“label”。默认为True。

sourcesList

指定从哪些节点开始遍历。注意:无法从这些源到达的节点可能不会显示。如果未指定,将使用到达所有其他节点所需的最小节点集。

max_depthint | None

遍历的最大深度。默认为None。

ascii_onlyBoolean

如果为True,仅使用ASCII字符构建可视化。

vertical_chainsBoolean

如果为True,尽可能垂直绘制节点链。

Yields:
str生成的文本行

Examples

>>> graph = nx.path_graph(10)
>>> graph.add_node("A")
>>> graph.add_node("B")
>>> graph.add_node("C")
>>> graph.add_node("D")
>>> graph.add_edge(9, "A")
>>> graph.add_edge(9, "B")
>>> graph.add_edge(9, "C")
>>> graph.add_edge("C", "D")
>>> graph.add_edge("C", "E")
>>> graph.add_edge("C", "F")
>>> nx.write_network_text(graph)
╙── 0
    └── 1
        └── 2
            └── 3
                └── 4
                    └── 5
                        └── 6
                            └── 7
                                └── 8
                                    └── 9
                                        ├── A
                                        ├── B
                                        └── C
                                            ├── D
                                            ├── E
                                            └── F
>>> nx.write_network_text(graph, vertical_chains=True)
╙── 0

    1

    2

    3

    4

    5

    6

    7

    8

    9
    ├── A
    ├── B
    └── C
        ├── D
        ├── E
        └── F