GenericGraph

限定名称: manim.mobject.graph.GenericGraph

GenericGraph(vertices, edges, labels=False, label_fill_color=ManimColor('#000000'), layout='spring', layout_scale=2, layout_config=None, vertex_type=<class 'manim.mobject.geometry.arc.Dot'>, vertex_config=None, vertex_mobjects=None, edge_type=<class 'manim.mobject.geometry.line.Line'>, partitions=None, root_vertex=None, edge_config=None)[source]

基类: VMobject

图(即由顶点和边组成的集合)的抽象基类。

图可以通过传递(不同、可哈希的)顶点名称列表和边列表(作为顶点名称元组)来实例化。有关此类的具体实现,请参阅示例。

注意

此实现使用更新器使边随顶点移动。

另请参阅

GraphDiGraph

参数:
  • vertices (序列[可哈希]) – 顶点列表。必须是可哈希元素。

  • edges (Sequence[tuple[Hashable, Hashable]]) – 边的列表,以元组(u, v)形式指定,其中uv都是顶点。

  • labels (bool | dict) – 控制顶点是否被标记。如果为False(默认值),则顶点不被标记;如果为True,则使用它们在vertices中指定的名称通过MathTex进行标记。另外,可以通过传递一个字典来指定自定义标签,该字典的键是顶点,值是相应的顶点标签(例如,通过TextTex渲染)。

  • label_fill_color (str) – 设置当labels设置为True时生成的默认标签的填充颜色。对labels的其他值无效。

  • layout (LayoutName | dict[Hashable, Point3DLike] | LayoutFunction) – 可以是"spring"(默认)、"circular""kamada_kawai""planar""random""shell""spectral""spiral""tree""partite"中的一个,用于主要使用networkx进行自动顶点定位(详见其文档);也可以是为每个顶点(键)指定坐标(值)的字典,用于手动定位;或者是一个具有用户自定义自动布局的.:class:~.LayoutFunction

  • layout_config (dict | None) – 仅用于自动布局。一个字典,其条目作为关键字参数传递给通过layout指定的命名布局或自动布局函数。tree布局还接受一个特殊参数vertex_spacing,作为关键字参数在layout_config字典中传递。将元组(space_x, space_y)作为此参数会覆盖layout_scale的值,并确保顶点排列方式使得同一层中兄弟节点的中心水平间隔至少space_x单位,并且相邻层垂直间隔space_y单位。

  • layout_scale (float | tuple[float, float, float]) – 自动生成布局的比例:顶点将按坐标位于区间[-scale, scale]内的方式排列。某些布局接受元组(scale_x, scale_y),使第一个坐标位于区间[-scale_x, scale_x]内,第二个坐标位于[-scale_y, scale_y]内。默认值:2。

  • vertex_type (type[Mobject]) – 用于在场景中显示顶点的mobject类。

  • vertex_config (dict | None) – 一个字典,包含要传递给通过vertex_type指定的类的关键字参数,或者一个字典,其键是顶点,值是包含与相应顶点相关的mobject的关键字参数的字典。

  • vertex_mobjects (字典 | ) – 一个字典,其键是顶点,值是作为顶点使用的 mobject。在此处传递顶点会覆盖顶点所有其他配置选项。

  • edge_type (type[Mobject]) – 用于在场景中显示边的mobject类。必须是Line的子类,以便默认更新器正常工作。

  • edge_config (dict | None) – 一个字典,包含要传递给通过edge_type指定的类的关键字参数,或者一个字典,其键是边,值是包含与相应边相关的mobject的关键字参数的字典。

  • partitions (序列[序列[可哈希]] | )

  • root_vertex (可哈希 | )

方法

add_edges

向图中添加新边。

add_vertices

向图中添加顶点列表。

change_layout

更改此图的布局。

from_networkx

从给定的networkx图构建GraphDiGraph

remove_edges

从图中移除多条边。

remove_vertices

从图中移除多个顶点。

属性

animate (动画)

用于动画化 self 的任何方法的应用。

animation_overrides (动画覆盖)

颜色

depth (深度)

mobject 的深度。

fill_color (填充颜色)

如果存在多种颜色(用于渐变),则返回第一种颜色

height (高度)

mobject 的高度。

n_points_per_curve (每条曲线的点数)

sheen_factor (光泽因子)

stroke_color (描边颜色)

width (宽度)

mobject 的宽度。

_add_edge(edge, edge_type=<class 'manim.mobject.geometry.line.Line'>, edge_config=None)[source]

向图中添加一条新边。

参数:
  • edge (tuple[Hashable, Hashable]) – 要添加的边(作为顶点标识符的元组)。如果传入一个不存在的顶点,将创建一个具有默认设置的新顶点。请事先自行创建新顶点以进行自定义。

  • edge_type (type[Mobject]) – 用于在场景中显示边的mobject类。

  • edge_config (dict | None) – 一个字典,包含要传递给通过edge_type指定的类的关键字参数。

返回:

包含所有新添加的顶点和边的组。

返回类型:

_add_vertex(vertex, position=None, label=False, label_fill_color=ManimColor('#000000'), vertex_type=<class 'manim.mobject.geometry.arc.Dot'>, vertex_config=None, vertex_mobject=None)[source]

向图中添加一个顶点。

参数:
  • vertex (Hashable) – 一个可哈希的顶点标识符。

  • position (Point3DLike | None) – 新顶点应添加的坐标。如果为None,则使用图的中心。

  • label (bool) – 控制顶点是否被标记。如果为False(默认值),则顶点不被标记;如果为True,则使用其名称(如在vertex中指定)通过MathTex进行标记。另外,任何Mobject都可以作为标签传递。

  • label_fill_color (str) – 设置当labels设置为True时生成的默认标签的填充颜色。对label的其他值无效。

  • vertex_type (type[Mobject]) – 用于在场景中显示顶点的mobject类。

  • vertex_config (dict | None) – 一个字典,包含要传递给通过vertex_type指定的类的关键字参数。

  • vertex_mobject (dict | None) – 用作顶点的mobject。会覆盖所有其他顶点自定义选项。

返回类型:

Mobject

静态 _empty_networkx_graph()[source]

返回给定图类型的空 networkx 图。

返回类型:

Graph

_original__init__(vertices, edges, labels=False, label_fill_color=ManimColor('#000000'), layout='spring', layout_scale=2, layout_config=None, vertex_type=<class 'manim.mobject.geometry.arc.Dot'>, vertex_config=None, vertex_mobjects=None, edge_type=<class 'manim.mobject.geometry.line.Line'>, partitions=None, root_vertex=None, edge_config=None)

初始化自身。有关准确签名,请参阅 help(type(self))。

参数:
  • vertices (序列[可哈希])

  • edges (序列[元组[可哈希, 可哈希]])

  • labels (布尔值 | 字典)

  • label_fill_color (字符串)

  • layout (Literal['circular', 'kamada_kawai', 'partite', 'planar', 'random', 'shell', 'spectral', 'spiral', 'spring', 'tree'] | dict[~collections.abc.Hashable, ~manim.typing.Point3DLike] | ~manim.mobject.graph.LayoutFunction)

  • layout_scale (浮点数 | 元组[浮点数, 浮点数, 浮点数])

  • layout_config (字典 | )

  • vertex_type (类型[Mobject])

  • vertex_config (字典 | )

  • vertex_mobjects (字典 | )

  • edge_type (类型[Mobject])

  • partitions (序列[序列[可哈希]] | )

  • root_vertex (可哈希 | )

  • edge_config (字典 | )

返回类型:

_populate_edge_dict(edges, edge_type)[source]

用于填充图的边的辅助方法。

参数:
  • edges (列表[元组[可哈希, 可哈希]])

  • edge_type (类型[Mobject])

_remove_edge(edge)[source]

从图中移除一条边。

参数:

edge (tuple[Hashable]) – 要从图中移除的边(即,顶点标识符的元组)。

返回:

被移除的边。

返回类型:

Mobject

_remove_vertex(vertex)[source]

从图中移除一个顶点(以及所有关联的边)。

参数:

vertex – 要移除的顶点标识符。

返回:

包含所有被移除对象的mobject。

返回类型:

add_edges(*edges, edge_type=<class 'manim.mobject.geometry.line.Line'>, edge_config=None, **kwargs)[source]

向图中添加新边。

参数:
  • edges (tuple[Hashable, Hashable]) – 要添加的边(作为顶点标识符的元组)。如果传入一个不存在的顶点,将创建一个具有默认设置的新顶点。请事先自行创建新顶点以进行自定义。

  • edge_type (type[Mobject]) – 用于在场景中显示边的mobject类。

  • edge_config (dict | None) – 一个字典,包含要传递给通过edge_type指定的类的关键字参数,或者一个字典,其键是边元组,值是包含要传递给相应边构造函数的关键字参数的字典。

  • kwargs – 任何其他关键字参数都将传递给add_vertices(),该函数用于在传入的边中创建新顶点。

返回:

包含所有新添加的顶点和边的组。

返回类型:

add_vertices(*vertices, positions=None, labels=False, label_fill_color=ManimColor('#000000'), vertex_type=<class 'manim.mobject.geometry.arc.Dot'>, vertex_config=None, vertex_mobjects=None)[source]

向图中添加顶点列表。

参数:
  • vertices (Hashable) – 可哈希的顶点标识符。

  • positions (dict | None) – 一个字典,指定新顶点应添加的坐标。如果为None,所有顶点将在图的中心创建。

  • labels (bool) – 控制顶点是否被标记。如果为False(默认值),则顶点不被标记;如果为True,则使用其名称(如在vertex中指定)通过MathTex进行标记。另外,任何Mobject都可以作为标签传递。

  • label_fill_color (str) – 设置当labels设置为True时生成的默认标签的填充颜色。对labels的其他值无效。

  • vertex_type (type[Mobject]) – 用于在场景中显示顶点的mobject类。

  • vertex_config (dict | None) – 一个字典,包含要传递给通过vertex_type指定的类的关键字参数。

  • vertex_mobjects (dict | None) – 一个字典,其键是顶点标识符,值是应作为顶点使用的mobject。会覆盖所有其他顶点自定义选项。

  • self (Graph)

change_layout(layout='spring', layout_scale=2, layout_config=None, partitions=None, root_vertex=None)[source]

更改此图的布局。

有关关键字参数的详细信息,请参阅Graph的文档。

示例

示例: ChangeGraphLayout

from manim import *

class ChangeGraphLayout(Scene):
    def construct(self):
        G = Graph([1, 2, 3, 4, 5], [(1, 2), (2, 3), (3, 4), (4, 5)],
                  layout={1: [-2, 0, 0], 2: [-1, 0, 0], 3: [0, 0, 0],
                          4: [1, 0, 0], 5: [2, 0, 0]}
                  )
        self.play(Create(G))
        self.play(G.animate.change_layout("circular"))
        self.wait()
class ChangeGraphLayout(Scene):
    def construct(self):
        G = Graph([1, 2, 3, 4, 5], [(1, 2), (2, 3), (3, 4), (4, 5)],
                  layout={1: [-2, 0, 0], 2: [-1, 0, 0], 3: [0, 0, 0],
                          4: [1, 0, 0], 5: [2, 0, 0]}
                  )
        self.play(Create(G))
        self.play(G.animate.change_layout("circular"))
        self.wait()

参数:
  • layout (Literal['circular', 'kamada_kawai', 'partite', 'planar', 'random', 'shell', 'spectral', 'spiral', 'spring', 'tree'] | dict[~collections.abc.Hashable, ~manim.typing.Point3DLike] | ~manim.mobject.graph.LayoutFunction)

  • layout_scale (浮点数 | 元组[浮点数, 浮点数, 浮点数])

  • layout_config (dict[str, Any] | None)

  • partitions (list[list[Hashable]] | None)

  • root_vertex (可哈希 | )

返回类型:

Graph

类方法 from_networkx(nxgraph, **kwargs)[source]

从给定的networkx图构建GraphDiGraph

参数:
  • nxgraph (Graph | DiGraph) – 一个networkx图或有向图。

  • **kwargs – 传递给Graph构造函数的关键字参数。

示例

示例: ImportNetworkxGraph

from manim import *

import networkx as nx

nxgraph = nx.erdos_renyi_graph(14, 0.5)

class ImportNetworkxGraph(Scene):
    def construct(self):
        G = Graph.from_networkx(nxgraph, layout="spring", layout_scale=3.5)
        self.play(Create(G))
        self.play(*[G[v].animate.move_to(5*RIGHT*np.cos(ind/7 * PI) +
                                         3*UP*np.sin(ind/7 * PI))
                    for ind, v in enumerate(G.vertices)])
        self.play(Uncreate(G))
import networkx as nx

nxgraph = nx.erdos_renyi_graph(14, 0.5)

class ImportNetworkxGraph(Scene):
    def construct(self):
        G = Graph.from_networkx(nxgraph, layout="spring", layout_scale=3.5)
        self.play(Create(G))
        self.play(*[G[v].animate.move_to(5*RIGHT*np.cos(ind/7 * PI) +
                                         3*UP*np.sin(ind/7 * PI))
                    for ind, v in enumerate(G.vertices)])
        self.play(Uncreate(G))

remove_edges(*edges)[source]

从图中移除多条边。

参数:

edges (tuple[Hashable]) – 要从图中移除的边。

返回:

包含所有被移除边的组。

返回类型:

remove_vertices(*vertices)[source]

从图中移除多个顶点。

参数:

vertices – 要从图中移除的顶点。

示例

>>> G = Graph([1, 2, 3], [(1, 2), (2, 3)])
>>> removed = G.remove_vertices(2, 3); removed
VGroup(Line, Line, Dot, Dot)
>>> G
Undirected graph on 1 vertices and 0 edges