Manim实现在坐标轴上添加元素和获取元素
1.坐标轴上获取元素
构造函数:
_get_axis_label(label, axis, edge, direction, buff=0.1)
函数 _get_axis_label
旨在为图形表示中的给定轴生成和定位标签(通常用于绘图或数学上下文中,可能是在某个创建动画或可视化的库内)。以下是该函数及其参数的详细说明:
参数:
-
label (float | str | Mobject):
- 这是要在轴上显示的标签内容,可以是数字(浮点数)、字符串或
Mobject
(可能是用于创建数学对象的类)。如果提供的是字符串或浮点数,默认将其转换为MathTex
对象,通常用于渲染数学表达式。
- 这是要在轴上显示的标签内容,可以是数字(浮点数)、字符串或
-
axis (Mobject):
- 该参数指定标签要附加到的轴。
Mobject
类型表示这是一个图形化的轴表示。
- 该参数指定标签要附加到的轴。
-
edge (Sequence[float]):
- 这是一个浮点数序列(如列表或元组),定义标签应添加到的轴的边缘。例如,它可以指定将标签放置在轴的右侧(表示为
RIGHT
)。
- 这是一个浮点数序列(如列表或元组),定义标签应添加到的轴的边缘。例如,它可以指定将标签放置在轴的右侧(表示为
-
direction (Sequence[float]):
- 此参数允许进一步调整标签的位置。可以用于相对轴轻微移动标签。
-
buff (float):
- Buff 表示标签与轴线之间的距离(或缓冲空间)。默认值为
0.1
,可以调整以提供更多或更少的空间。
- Buff 表示标签与轴线之间的距离(或缓冲空间)。默认值为
_get_axis_label
方法通常是 Manim 源代码中的一个内部方法,可能不属于公共 API,因此不建议直接使用。相反,你应该使用 Manim 提供的公共方法 get_x_axis_label()
和 get_y_axis_label()
,这样可以避免使用内部实现,并确保代码在未来的 Manim 更新中仍然有效。
示例:
from manim import *
class SimpleAxis001(Scene):
def construct(self):
# 创建坐标轴
axes = Axes(
x_range=[0, 4, 1], # x轴范围和步长
y_range=[0, 16, 4], # y轴范围和步长
axis_config={"color": BLUE}, # 坐标轴颜色
)
# 添加坐标轴到场景
self.add(axes)
# 创建数据点 (0, 0), (1, 1), (2, 4), (3, 9), (4, 16)
points = [(x, x**2) for x in range(5)]
# 创建图形并添加到场景
graph = axes.plot(lambda x: x**2, color=YELLOW)
self.add(graph)
# 添加标签
x_label = axes.get_x_axis_label("X-axes",buff=0,)
y_label = axes.get_y_axis_label("Y-axes")
self.add(x_label, y_label)
# 添加标题
title = Text("简单的坐标图").to_edge(UP)
self.add(title)
运行结果:
2.坐标轴上添加标签的函数
add_coordinates(*axes_numbers, **kwargs)[source]
add_coordinates
是 Manim 中一个用于在坐标轴上添加标签的函数,通常可以在绘制数学图形或函数图时使用。这个函数可以帮助你为坐标轴上的特定值添加注释或标签,使得图形更具可读性和解释性。
参数解释
-
axes_numbers (Iterable[float] | None | dict[float, str | float | Mobject]):
- 这个参数可以是一个可迭代对象(如列表或元组),其中包含你希望添加坐标标签的数字。
- 也可以是一个字典,键是坐标位置,值是对应的标签(字符串、数字或
Mobject
)。 - 如果它是
None
,将不添加任何默认标签。
-
kwargs (Any):
- 这是一个可选参数,允许你传递额外的关键字参数,通常用于设置标签的样式,比如字体、颜色、大小等。
示例1:
from manim import *
class AddCoordinatesExample01(Scene):
def construct(self):
# 创建坐标轴
ax = ThreeDAxes()
x_labels = range(-4, 5)
z_labels = range(-4, 4, 1)
a=ax.add_coordinates(x_labels ,z_labels ,color=GREEN) # default y labels, custom x & z labels
b=ax.add_coordinates(x_labels,color=RED) # only x labels
self.add(a,b)
运行结果:
示例2:
from manim import *
class AddCoordinatesExample02(Scene):
def construct(self):
# 创建坐标轴
ax = Axes(x_range=[0, 7])
x_pos = [x for x in range(1, 8)]
# strings are automatically converted into a Tex mobject.
x_vals = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
x_dict = dict(zip(x_pos, x_vals))
a=ax.add_coordinates(x_dict)
self.add(a)
代码分析:
-
创建坐标轴:
ax = Axes(x_range=[0, 7])
创建了一个 x 轴范围为0到7的坐标系。
-
创建 x 轴位置列表:
x_pos = [x for x in range(1, 8)]
生成一个列表
x_pos
,包含整数 1 到 7,代表每周的每一天。 -
字符串标签:
x_vals = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
创建一个有七个元素的字符串列表
x_vals
,每个元素对应星期几。 -
创建键值对字典:
x_dict = dict(zip(x_pos, x_vals))
使用
zip
函数将x_pos
和x_vals
配对,并转换为字典x_dict
,格式为{1: "Monday", ..., 7: "Sunday"}
。 -
向坐标系添加坐标:
a = ax.add_coordinates(x_dict) self.add(a)
尝试将这些字符串作为坐标添加到坐标系
ax
中。
运行结果: