网络¶
影片代码
import manimgx as m
class NetworksHero(m.Scene):
def construct(self) -> None:
vertices = [1, 2, 3, 4, 5, 6]
edges = [(1, 2), (2, 3), (3, 1), (3, 4), (4, 5), (5, 6), (6, 4)]
graph = m.Graph(vertices, edges, layout="spring", labels=True, layout_scale=3)
self.play(m.Create(graph))
self.play(graph.animate.change_layout("circular", layout_scale=3))
self.wait()
网络是由边连接的顶点:即图论意义上的图。(关于函数的图形,请参见
绘图。)Graph 用线连接其顶点,
DiGraph 用箭头连接,从每条边的第一个顶点指向第二个。两者都会自动为你
布局顶点(layout="spring"、"circular"、"tree"、…),或按你指定的位置放置;顶点默认
为圆点,除非你指定其他 mobject。
两者都能执行以下操作:添加和移除顶点与边、更改布局,以及从 NetworkX 读取网络。
Graph
¶
代码
import manimgx as m
class GraphExample(m.Scene):
def construct(self) -> None:
vertices = [1, 2, 3, 4, 5, 6]
edges = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1), (1, 4), (2, 5)]
graph = m.Graph(
vertices,
edges,
layout="circular",
layout_scale=3,
labels=True,
vertex_config={1: {"fill_color": m.RED}},
edge_config={(1, 4): {"stroke_color": m.YELLOW}},
)
self.play(m.Create(graph))
self.play(graph[3].animate.move_to([0, 0, 0]))
无向图:由边连接的顶点,自动或手动布局; 除非另行设置,默认为白色圆点和线条。
每条边从一个顶点的中心到另一个顶点的中心,绘制在它们之后, 并随其移动而跟随。它接受 GenericGraph 的参数,后者列出了图所能做的事情。
源码
manimgx\mobjects\graph.py
DiGraph
¶
代码
import manimgx as m
class DiGraphExample(m.Scene):
def construct(self) -> None:
edge_config = {
"stroke_width": 3,
"tip_config": {"tip_length": 0.2, "tip_width": 0.2},
(3, 4): {
"color": m.RED,
"tip_config": {"tip_shape": m.ArrowSquareTip},
},
}
graph = m.DiGraph(
[0, 1, 2, 3, 4],
[(0, 1), (1, 2), (3, 2), (3, 4), (4, 0)],
labels=True,
layout="circular",
layout_scale=3,
edge_config=edge_config,
)
self.play(m.Create(graph))
有向图:由箭头连接的顶点,从每条边的第一个顶点 指向第二个顶点;除非另行设置,默认为白色圆点和箭头。
每条边从一个顶点的轮廓到另一个顶点的轮廓,末端为一个尖端,
由 edge_config 的 "tip_config" 塑形(参见
TipConfig),对所有边或某条边单独生效;
它随其顶点移动而跟随。它接受 GenericGraph
的参数,后者列出了图所能做的事情。
源码
manimgx\mobjects\graph.py
TipConfig
¶
DiGraph 边的尖端,在其 edge_config 中以 "tip_config"
给出:对所有边生效,或对某条边单独生效(参见
add_tip)。
tip_shape尖端的类(默认 None: ArrowTriangleFilledTip)。
tip_length尖端的长度,以场景单位计(默认 None:边的默认值)。
tip_width默认填充三角形尖端的宽度,以场景单位计(默认 None: 其长度)。
tip_shape
¶
尖端的类(默认 None: ArrowTriangleFilledTip)。
tip_length
¶
尖端的长度,以场景单位计(默认 None:边的默认值)。
tip_width
¶
默认填充三角形尖端的宽度,以场景单位计(默认 None: 其长度)。
网络能做什么¶
Graph 和 DiGraph 都继承自 GenericGraph,后者包含了它们的共有功能。
GenericGraph
¶
vertices
¶
顶点的 mobject,按顶点索引。
edges
¶
边的 mobject,按顶点对索引。
add_vertices
¶
代码
import manimgx as m
class GraphAddVerticesExample(m.Scene):
def construct(self) -> None:
graph = m.Graph(
[1, 2, 3],
[(1, 2), (2, 3)],
layout={1: [-4, -1, 0], 2: [0, -2, 0], 3: [4, -1, 0]},
vertex_config={"radius": 0.15},
)
self.add(graph)
top = graph.add_vertices(
4, positions={4: [0, 2.5, 0]}, vertex_config={"color": m.YELLOW}
)
self.play(m.FadeIn(top, scale=3))
self.play(m.Create(graph.add_edges((1, 4), (3, 4))))
向图中添加顶点,不添加边。
每个顶点按图构造顶点的方式构造,使用覆盖图自身关键字的关键字, 并放置在其位置处,或图的中心处。图中已存在的顶点会引发 ValueError。
*vertices新顶点:可哈希的值,每个是一个顶点的名称。
positions新顶点所在之处,按顶点指定(默认 None:位于图的中心)。
labels每个新顶点是否以其名称标注,名称以数学排版:True 表示 全部标注,或按顶点指定,True 或自定义标签(默认 False)。
label_fill_color由名称生成的标签的颜色(默认黑色)。
vertex_type新顶点的类(默认 Dot;带标签的为 LabeledDot)。
vertex_config新顶点的关键字,覆盖图自身的:对所有顶点生效,以及某个顶点 在其名称下的独有配置,取代对所有顶点的配置(默认 None:无)。
vertex_mobjects作为顶点本身的 Mobject,按顶点指定(默认 None:无)。
返回 由新顶点的 mobject 构成的新组。
源码
manimgx\mobjects\graph.py
remove_vertices
¶
从图中移除顶点,以及与之相连的边。
图中不存在的顶点会引发 ValueError。
*vertices要移除的顶点。
返回 由被移除的 mobject 构成的新组(对每个顶点,先为其边,再为顶点本身), 例如可用于淡出。
源码
manimgx\mobjects\graph.py
add_edges
¶
向图中添加边,以及边所引用而图中尚缺的顶点。
缺失的顶点先被添加,添加方式同 add_vertices,使用给定的 顶点关键字;随后每条边按图构造边的方式构造,使用覆盖图自身关键字的 边关键字。
generic_graph.add_edges(*edges, edge_type=Line, edge_config=None, **kwargs)
*edges新边,每个是顶点的有序对。
edge_type新边的类。
edge_config新边的关键字,覆盖图自身的:对所有边生效,以及某条边 在其顶点对下的独有配置,取代对所有边的配置; None 表示无。
positions新顶点所在之处,按顶点指定(默认 None:位于图的中心)。
labels每个新顶点是否以其名称标注,名称以数学排版:True 表示 全部标注,或按顶点指定,True 或自定义标签(默认 False)。
label_fill_color由名称生成的标签的颜色(默认黑色)。
vertex_type新顶点的类(默认 Dot;带标签的为 LabeledDot)。
vertex_config新顶点的关键字,覆盖图自身的:对所有顶点生效,以及某个顶点 在其名称下的独有配置,取代对所有顶点的配置(默认 None:无)。
vertex_mobjects作为顶点本身的 Mobject,按顶点指定(默认 None:无)。
返回 由新 mobject 构成的新组,先为添加的顶点,再为边。
源码
manimgx\mobjects\graph.py
remove_edges
¶
从图中移除边,保留其顶点。
图中不存在的边会引发 ValueError。
*edges要移除的边,每个是顶点的有序对。
返回 由被移除的边的 mobject 构成的新组。
change_layout
¶
代码
import manimgx as m
class GraphChangeLayoutExample(m.Scene):
def construct(self) -> None:
graph = m.Graph(
[1, 2, 3, 4, 5, 6],
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1), (1, 4)],
layout={v: [2 * v - 7, 0, 0] for v in range(1, 7)},
)
circle = graph.copy().change_layout("circular", layout_scale=3)
self.add(graph)
self.play(
*(graph[v].animate.move_to(circle[v]) for v in graph.vertices)
)
对图重新布局:将每个顶点移动到其在布局中的位置。
顶点一次性移动,边在下一帧跟随,由图的更新器移动。若要为变化设置动画, 请将每个顶点动画移动到已更改副本中的位置(如下所示):边会全程跟随。
布局函数收到一个由当前顶点和边构成的全新 NetworkX 图。 其节点、边和图属性属于该次调用,而非后续布局。
layout顶点所在之处:布局的名称、其位置,或一个 布局函数(参见 GenericGraph)。
layout_scale布局从中心向外延伸的距离,以场景单位计。
layout_config布局函数的关键字;None 表示无。
partitions用于
"partite"布局:每列的顶点;None 表示无。root_vertex用于
"tree"布局:位于顶部的顶点;None 表示无。
源码
manimgx\mobjects\graph.py
from_networkx
¶
代码
import networkx as nx
import manimgx as m
class GraphFromNetworkxExample(m.Scene):
def construct(self) -> None:
petersen = nx.petersen_graph()
graph = m.Graph.from_networkx(
petersen,
layout="shell",
layout_scale=3,
layout_config={"nlist": [range(5, 10), range(5)]},
)
self.play(m.Create(graph), run_time=2)
由 NetworkX 图的节点和边构造一个图。
nxgraphNetworkX 图(一个
Graph,或一个DiGraph)。labels每个顶点是否以其名称标注,名称以数学排版,或为每个顶点指定 标签(默认 False)。
label_fill_color由名称生成的标签的颜色(默认黑色)。
layout顶点所在之处:布局的名称、其位置或一个布局函数 (默认
"spring")。layout_scale布局从中心向外延伸的距离,以场景单位计(默认 2)。
layout_config布局函数的关键字:
"spring"布局的seed,……(默认 None: 无)。vertex_type顶点的类(默认 Dot;带标签的为 LabeledDot)。
vertex_config顶点的关键字:对所有顶点生效,以及某个顶点在其名称下的独有配置,取代 对所有顶点的配置(默认 None:无)。
vertex_mobjects作为顶点本身的 Mobject,按顶点指定(默认 None:无)。
edge_type边的类(默认 Line)。
partitions用于
"partite"布局:每列的顶点,按顺序排列(默认 None: 无)。root_vertex用于
"tree"布局:位于顶部的顶点(默认 None:无)。edge_config边的关键字:对所有边生效,以及某条边在其顶点对下的独有配置,取代 对所有边的配置(默认 None:无)。
返回 一个新的图。
源码
manimgx\mobjects\graph.py
VertexOptions
¶
add_vertices 的关键字, 用于传递它们的方法:新顶点所在之处、其标签、其类型及其关键字。
positions新顶点所在之处,按顶点指定(默认 None:位于图的中心)。
labels每个新顶点是否以其名称标注,名称以数学排版:True 表示 全部标注,或按顶点指定,True 或自定义标签(默认 False)。
label_fill_color由名称生成的标签的颜色(默认黑色)。
vertex_type新顶点的类(默认 Dot;带标签的为 LabeledDot)。
vertex_config新顶点的关键字,覆盖图自身的:对所有顶点生效,以及某个顶点 在其名称下的独有配置,取代对所有顶点的配置(默认 None:无)。
vertex_mobjects作为顶点本身的 Mobject,按顶点指定(默认 None:无)。
positions
¶
新顶点所在之处,按顶点指定(默认 None:位于图的中心)。
labels
¶
每个新顶点是否以其名称标注,名称以数学排版:True 表示 全部标注,或按顶点指定,True 或自定义标签(默认 False)。
label_fill_color
¶
由名称生成的标签的颜色(默认黑色)。
vertex_type
¶
新顶点的类(默认 Dot;带标签的为 LabeledDot)。
vertex_config
¶
新顶点的关键字,覆盖图自身的:对所有顶点生效,以及某个顶点 在其名称下的独有配置,取代对所有顶点的配置(默认 None:无)。
vertex_mobjects
¶
作为顶点本身的 Mobject,按顶点指定(默认 None:无)。