通用图¶
限定名称: manim.mobject.graph.GenericGraph
- class 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图的抽象基类(即由边连接的顶点集合)。
可以通过传递一个(唯一的、可哈希的)顶点名称列表以及边列表(作为顶点名称的元组)来实例化图。有关此类的具体实现,请参见示例。
注意
此实现使用更新器使边随顶点移动。
- Parameters:
顶点 (列表[可哈希]) – 顶点列表。必须是可哈希的元素。
edges (list[tuple[Hashable, Hashable]]) – 边的列表,指定为元组
(u, v),其中u和v都是顶点。labels (bool | dict) – 控制顶点是否被标记。如果为
False(默认值), 顶点不会被标记;如果为True,则使用它们的名称(在vertices中指定)通过MathTex进行标记。另外, 可以通过传递一个字典来指定自定义标签,字典的键是顶点,值是对应的顶点标签 (通过例如文本或Tex渲染)。label_fill_color (str) – 设置当
labels设置为True时生成的默认标签的填充颜色。对于labels的其他值没有影响。布局 (布局名称 | 字典[可哈希, 三维点] | 布局函数) – 可以是以下之一:
"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 (dict | None) – 一个字典,其键是顶点,值是用于顶点的mobjects。在此传递顶点将覆盖顶点的所有其他配置选项。
edge_type (type[Mobject]) – 用于在场景中显示边的mobject类。
edge_config (dict | None) – 可以是一个包含关键字参数的字典,这些参数将传递给通过
edge_type指定的类,或者是一个字典,其键是边,值是与相应边相关的mobject的关键字参数。partitions (列表[列表[Hashable]] | 无)
root_vertex (可哈希的 | 无)
方法
向图中添加新的边。
向图中添加一系列顶点。
更改此图的布局。
从图中移除多条边。
从图中移除多个顶点。
属性
animate用于动画化
self的任何方法的应用。animation_overridescolordepthmobject的深度。
fill_color如果有多种颜色(用于渐变),则返回第一个颜色
heightmobject的高度。
n_points_per_curvesheen_factorstroke_colorwidthmobject的宽度。
- _add_edge(edge, edge_type=<class 'manim.mobject.geometry.line.Line'>, edge_config=None)[source]¶
向图中添加一条新边。
- _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)[来源]¶
向图中添加一个顶点。
- Parameters:
顶点 (可哈希) – 一个可哈希的顶点标识符。
位置 (Point3D | 无) – 新顶点应添加的坐标。如果
无,则使用图的中心。标签 (布尔值) – 控制顶点是否被标记。如果为
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。覆盖所有其他顶点自定义选项。
- Return type:
- _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))。
- Parameters:
顶点 (列表[可哈希])
edges (列表[元组[Hashable, Hashable]])
标签 (布尔 | 字典)
label_fill_color (str)
布局 (字面量['circular', 'kamada_kawai', 'partite', 'planar', 'random', 'shell', 'spectral', 'spiral', 'spring', 'tree'] | 字典[~typing.Hashable, ~manim.typing.Point3D] | ~manim.mobject.graph.LayoutFunction)
layout_scale (float | tuple[float, float, float])
layout_config (dict | None)
vertex_type (类型[Mobject])
vertex_config (字典 | 无)
vertex_mobjects (字典 | 无)
edge_type (类型[Mobject])
partitions (列表[列表[Hashable]] | 无)
root_vertex (可哈希的 | 无)
edge_config (dict | None)
- Return type:
无
- _populate_edge_dict(edges, edge_type)[来源]¶
用于填充图形边缘的辅助方法。
- Parameters:
edges (列表[元组[Hashable, Hashable]])
edge_type (类型[Mobject])
- _remove_edge(edge)[来源]¶
从图中移除一条边。
- Parameters:
edge (tuple[Hashable]) – 要从图中移除的边(即顶点标识符的元组)。
- Returns:
移除的边。
- Return type:
- _remove_vertex(vertex)[source]¶
从图中移除一个顶点(以及所有相关的边)。
- Parameters:
vertex – 要移除的顶点的标识符。
- Returns:
一个包含所有已移除对象的mobject。
- Return type:
- add_edges(*edges, edge_type=<class 'manim.mobject.geometry.line.Line'>, edge_config=None, **kwargs)[source]¶
向图中添加新的边。
- Parameters:
edges (tuple[Hashable, Hashable]) – 要添加的边(作为顶点标识符的元组)。如果传递了一个不存在的顶点,将会创建一个具有默认设置的新顶点。您可以预先创建新顶点以自定义它们。
edge_type (type[Mobject]) – 用于在场景中显示边的mobject类。
edge_config (dict | None) – 一个字典,包含要传递给通过
edge_type指定的类的关键字参数,或者一个字典,其键是边的元组,其值是包含要传递给相应边构造的关键字参数的字典。kwargs – 任何进一步的关键字参数都会传递给
add_vertices(),该函数用于在传递的边中创建新的顶点。
- Returns:
包含所有新添加的顶点和边的组。
- Return type:
- 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]¶
向图中添加一系列顶点。
- Parameters:
顶点 (可哈希) – 可哈希的顶点标识符。
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) – 一个字典,其键是顶点标识符,其值是应该用作顶点的mobjects。覆盖所有其他顶点自定义选项。
self (图)
- 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()- Parameters:
布局 (字面量['circular', 'kamada_kawai', 'partite', 'planar', 'random', 'shell', 'spectral', 'spiral', 'spring', 'tree'] | 字典[~typing.Hashable, ~manim.typing.Point3D] | ~manim.mobject.graph.LayoutFunction)
layout_scale (float | tuple[float, float, float])
layout_config (dict[str, Any] | None)
partitions (列表[列表[Hashable]] | 无)
root_vertex (可哈希的 | 无)
- Return type:
- classmethod from_networkx(nxgraph, **kwargs)[source]¶
从给定的
networkx图中构建一个Graph或DiGraph。- Parameters:
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))