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

  1. 每个可达节点将精确地在其自己的行上打印一次。

  2. 边通过以下四种方式之一表示:

    a. 左上方的一个父级“L形”连接。这对应于有向DFS树中的遍历。

    b. 直接显示在右侧的回引“<-形”连接。对于有向图,这些连接表示非父边的任何入边。对于无向图,这些连接仅表示已表示过的非父边(未表示的边将在递归情况下处理)。

    c. 右下方的一个子级“L形”连接。子节点的绘制通过递归处理。

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

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

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

6. 如果一个节点具有真值的“collapse”属性,则我们不会遍历该节点之后的部分。

参数:
graphnx.DiGraph | nx.Graph

要表示的图

with_labelsbool | str

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

sourcesList

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

max_depthint | None

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

ascii_onlyBoolean

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

vertical_chainsBoolean

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

生成:
str生成的文本行

示例

>>> 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