数轴¶
影片代码
import manimgx as m
class NumberLinesHero(m.Scene):
def construct(self) -> None:
line = m.NumberLine(x_range=[-3, 3, 1], length=10, include_numbers=True)
dot = m.Dot(line.n2p(-2), radius=0.12, color=m.YELLOW)
interval = m.UnitInterval(length=8, include_numbers=True).shift(2 * m.DOWN)
self.play(m.Create(line))
self.play(m.GrowFromCenter(dot))
self.play(dot.animate.move_to(line.n2p(2.5)), run_time=2)
self.play(m.Create(interval))
self.wait()
数轴是一条在每个点处标有数字的直线。其范围 [start, end, step] 给出了首尾数字以及刻度之间的步长;其长度以帧的单位表示。n2p 将一个数字转换为该数字在数轴上的点,以便将任何对象放置在某个数字处。
坐标轴也是数轴:Axes 的每根轴都是一个数轴,并接受以下关键字参数。
NumberLine
¶

代码
import manimgx as m
class NumberLineExample(m.Scene):
def construct(self) -> None:
lines = m.VGroup(
m.NumberLine(x_range=[-5, 5, 1], length=12, include_numbers=True),
m.NumberLine(
x_range=[0, 2, 0.25],
length=12,
include_numbers=True,
font_size=28,
color=m.BLUE,
),
m.NumberLine(
x_range=[-10, 10, 2],
length=12,
numbers_with_elongated_ticks=[-10, 0, 10],
include_tip=True,
include_numbers=True,
label_direction=m.UP,
color=m.YELLOW,
),
).arrange(m.DOWN, buff=1)
self.add(lines)
数轴:一条带有其范围每一步处刻度的直线,若要求则有数字,以及数字与点之间的映射;未设置样式时为白色,线宽 2。
其范围 [x_min, x_max, x_step] 从左端运行到右端:数轴长 length,以场景单位计,或每单位 unit_size,并居中于场景原点(然后旋转 rotation)。其刻度间距为 x_step,当范围包含 0 时从 0 开始计数(否则从 x_min 开始);末端的箭头取代最后一个刻度。
number_to_point 和 point_to_number 在数字与点之间转换;add_numbers 和 add_labels 在其上书写。scaling 以其他方式分布数字:使用 LogBase 时,范围为指数,数轴的数字为幂。
初始长度、旋转、箭头尺寸以及要绘制哪些刻度/数字是构造输入,而非保留的属性。数轴保留其绘图以及后续刻度和标签方法所用的默认值;要排除的数字和具有加长刻度的数字保留为数轴创建时的列表。
m.NumberLine(x_range=None, length=None, unit_size=1, include_ticks=True, tick_size=0.1, numbers_with_elongated_ticks=None, longer_tick_multiple=2, exclude_origin_tick=False, rotation=0, include_tip=False, tip_width=DEFAULT_ARROW_TIP_LENGTH, tip_height=DEFAULT_ARROW_TIP_LENGTH, tip_shape=None, include_numbers=False, font_size=36, label_direction=DOWN, label_constructor=MathTex, scaling=_AXIS_LINEAR, line_to_number_buff=MED_SMALL_BUFF, decimal_number_config=None, numbers_to_exclude=None, numbers_to_include=None, **kwargs)
x_range范围,
[x_min, x_max, x_step],或[x_min, x_max]表示步长为 1;None 表示 [-7, 7, 1]。length数轴的长度,以场景单位计;None 表示每单位
unit_size。unit_size当
length为 None 时一个单位的长度,以场景单位计。include_ticks是否绘制刻度。
tick_size每个刻度向数轴两侧延伸的距离,以场景单位计:其长度的一半。
numbers_with_elongated_ticks刻度更长的数字;None 表示无。
longer_tick_multiple那些刻度长多少倍。
exclude_origin_tick是否省略 0 处的刻度。
rotation数轴绕其中心旋转的角度,以弧度计,逆时针方向。
include_tip数轴末端是否有箭头。
tip_width箭头的宽度,以场景单位计。
tip_height箭头沿数轴的长度,以场景单位计。
tip_shape箭头的类;None 表示 ArrowTriangleFilledTip。
include_numbers是否为刻度编号(参见 add_numbers)。
font_size数字的字号。
label_direction数字位于数轴的哪一侧,作为方向:DOWN 表示下方。
label_constructorscaling数字沿数轴如何分布:均匀分布,使用 LinearBase,或按对数分布,使用 LogBase(其数字随后写为幂)。
line_to_number_buff数轴与其数字之间的间距,以场景单位计。
decimal_number_config数字的 数字关键字;None 表示与
x_step相同的小数位数。numbers_to_exclude刻度编号时不写的数字;None 表示无。
numbers_to_include要写的数字,替代刻度的数字:给出时,即使没有
include_numbers也会写它们。None 表示刻度的数字。color填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。
tip_lengthnormal_vector路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。
tip_style路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的
fill_color和stroke_color取路径的颜色。fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 箭头关键字。
源码
manimgx\mobjects\plotting.py
740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 | |
x_range
¶
数轴的范围,[x_min, x_max, x_step],按给出时的形式:在对数数轴上为指数。
x_min
¶
数轴起点的数字:其范围的第一个值,经刻度变换(对数数轴上从 0 开始的范围对应 10⁰ = 1)。
x_max
¶
数轴终点的数字:其范围的第二个值,经刻度变换。
x_step
¶
其范围的步长,经刻度变换。
unit_size
¶
数轴创建时一个单位的长度,以场景单位计;参见 get_unit_size 了解其当前长度。
scaling
¶
数轴的数字沿其如何分布。
rotate_about_zero
¶
将数轴绕其数字 0 的点旋转。
number_line.rotate_about_zero(angle, axis=OUT)
angle角度,以弧度计,绕
axis逆时针方向。axis旋转的轴:OUT 使其在屏幕平面内旋转。
rotate_about_number
¶
将数轴绕其某个数字的点旋转。
number_line.rotate_about_number(number, angle, axis=OUT)
number其点保持不变的数字。
angle角度,以弧度计,绕
axis逆时针方向。axis旋转的轴:OUT 使其在屏幕平面内旋转。
源码
manimgx\mobjects\plotting.py
number_to_point
¶
将数字转换为其在数轴上的点,或将数字转换为其点。
范围外的数字位于数轴向两端延伸的部分。
number数字;或任意形状的数字数组。
返回 点,在场景坐标系中;对于数组,为点,坐标在最后(数组的形状,然后 3)。
源码
manimgx\mobjects\plotting.py
point_to_number
¶
将点转换为其在数轴上投影处的数字:对于数轴上的点,是 number_to_point 的反函数。
point点,在场景坐标系中。
源码
manimgx\mobjects\plotting.py
n2p
¶
get_unit_size
¶
数轴一个单位的长度:其长度除以其范围。
返回 长度,以场景单位计(对数数轴上为指数单位的长度)。
get_unit_vector
¶
数轴的方向,一个单位长:从其起点指向终点的向量,长度为数轴创建时的单位(其 unit_size)。
返回 向量,以场景单位计。
get_number_mobject
¶
制作一个数字,写在其数轴上的点旁。
它是一个 DecimalNumber,采用数轴的数字样式(其 decimal_number_config 和 font_size),并用 number_config 覆盖。直接写在数轴下方或上方的负数会被移位,使其数字而非负号居中于该点。
x数字。
direction数字位于数轴的哪一侧;None 表示数轴的
label_direction。buff数轴与数字之间的间距,以场景单位计;None 表示数轴的
line_to_number_buff。label_constructor其排版类;None 表示数轴的。
num_decimal_places小数点后跟随的数字位数(默认为 2)。
mob_class每个字符排版所用的类(默认为 MathTex)。
include_sign非负数是否带加号书写(默认为 False)。
group_with_commas小数点前的数字是否按三位一组用逗号分组,如 12,345(默认为 True)。
digit_buff_per_font_unit字符之间的间距,按字体大小单位计:默认值 0.001 在字体大小 48 时为 0.048 个场景单位。
show_ellipsis数字后是否跟"…",用于表示持续变化的值(默认为 False)。
unit数字后的单位,以 LaTeX 数学表示:
"^\circ"表示度,r"\text{ m}"表示米; 以 "^" 开头的单位会提升到数字的顶部(默认为 None)。unit_buff_per_font_unit单位前的间距,超出字符间距之外的部分,按字体大小单位计(默认为 0)。
include_background_rectangle数字后是否有背景矩形(默认为 False)。
edge_to_fix当新值改变数字宽度时保持不动的边缘,以方向表示(默认为 LEFT:向右生长)。
font_size字符的字体大小,以
mob_class的度量方式计(默认为 48)。color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
返回 一个新的数字,未添加到数轴。
源码
manimgx\mobjects\plotting.py
add_numbers
¶

代码
import manimgx as m
class NumberLineAddNumbersExample(m.Scene):
def construct(self) -> None:
ticks = m.NumberLine(x_range=[0, 10, 1], length=12).add_numbers()
chosen = m.NumberLine(x_range=[0, 10, 1], length=12, color=m.BLUE)
chosen.add_numbers(
[0, 2.5, 5, 7.5, 10], num_decimal_places=1, color=m.BLUE
)
self.add(m.VGroup(ticks, chosen).arrange(m.DOWN, buff=1.5))
为数轴编号:在给定值的点旁写数字,或在其刻度处写。
每个数字按 get_number_mobject 的书写方式书写。数字是一个组,添加到数轴,并保留为其 numbers。
x_values要写的数字;None 表示刻度的数字。
excluding不写的数字;None 表示数轴的
numbers_to_exclude。label_constructor它们的排版类;None 表示数轴的。
num_decimal_places小数点后跟随的数字位数(默认为 2)。
mob_class每个字符排版所用的类(默认为 MathTex)。
include_sign非负数是否带加号书写(默认为 False)。
group_with_commas小数点前的数字是否按三位一组用逗号分组,如 12,345(默认为 True)。
digit_buff_per_font_unit字符之间的间距,按字体大小单位计:默认值 0.001 在字体大小 48 时为 0.048 个场景单位。
show_ellipsis数字后是否跟"…",用于表示持续变化的值(默认为 False)。
unit数字后的单位,以 LaTeX 数学表示:
"^\circ"表示度,r"\text{ m}"表示米; 以 "^" 开头的单位会提升到数字的顶部(默认为 None)。unit_buff_per_font_unit单位前的间距,超出字符间距之外的部分,按字体大小单位计(默认为 0)。
include_background_rectangle数字后是否有背景矩形(默认为 False)。
edge_to_fix当新值改变数字宽度时保持不动的边缘,以方向表示(默认为 LEFT:向右生长)。
font_size字符的字体大小,以
mob_class的度量方式计(默认为 48)。color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
源码
manimgx\mobjects\plotting.py
add_labels
¶

代码
import manimgx as m
class NumberLineAddLabelsExample(m.Scene):
def construct(self) -> None:
line = m.NumberLine(x_range=[0, m.TAU, m.PI / 2], length=12)
line.add_labels(
{
0: "0",
m.PI / 2: m.MathTex(r"\frac{\pi}{2}"),
m.PI: m.MathTex(r"\pi"),
3 * m.PI / 2: m.MathTex(r"\frac{3\pi}{2}"),
m.TAU: m.MathTex(r"2\pi"),
},
font_size=44,
)
self.add(line)
为数轴加标签:将每个标签放在其数字的点旁。
字符串在构造函数为 MathTex(默认情况)时用 Tex 排版为文本,否则用构造函数排版;数字用构造函数书写。mobject 按原样使用,且必须是已排版的(一个 Typst mobject:Text、Tex、MathTex、…)或一个 DecimalNumber:其他会引发异常。每个标签设置为 font_size。标签是一个组,添加到数轴,并保留为其 labels。
dict_values标签,按数字。
direction标签位于数轴的哪一侧,作为方向;None 表示数轴的
label_direction。buff数轴与标签之间的间距,以场景单位计;None 表示数轴的
line_to_number_buff。font_size标签的字号;None 表示数轴的。
label_constructor字符串和数字的排版类;None 表示数轴的。
源码
manimgx\mobjects\plotting.py
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 | |
UnitInterval
¶
单位区间:从 0 到 1 的数轴,每十分之一处有一个刻度;长 10 个单位,其 0 和 1 处的刻度更长,除非另有说明。
其数字(若有)有一位小数。
length数轴的长度,以场景单位计(默认 None:每单位
unit_size)。unit_size未给出
length时一个单位的长度,以场景单位计(默认 1)。include_ticks是否绘制刻度(默认 True)。
tick_size每个刻度向数轴两侧延伸的距离,以场景单位计:其长度的一半(默认 0.1)。
numbers_with_elongated_ticks刻度更长的数字(默认 None:无)。
longer_tick_multiple那些刻度长多少倍(默认 2)。
exclude_origin_tick是否省略 0 处的刻度(默认 False;Axes 的坐标轴在线性时会省略它,因为另一坐标轴在此处穿过)。
rotation数轴绕其中心旋转的角度,以弧度计,逆时针方向(默认 0;y 轴的为四分之一圈)。
include_tip数轴末端是否有箭头(默认 False;坐标轴的箭头会有,除非
tips=False)。tip_width箭头的宽度,以场景单位计(默认 0.35)。
tip_height箭头沿数轴的长度,以场景单位计(默认 0.35)。
tip_shape箭头的类(默认 None:ArrowTriangleFilledTip)。
include_numbers是否为刻度编号(默认 False)。
font_size数字的字号(默认 36)。
label_direction数字位于数轴的哪一侧,作为方向(默认 DOWN:下方;y 轴的数字在其左侧)。
label_constructor数字和标签的排版类(默认 MathTex)。
scaling数字沿数轴如何分布:均匀分布,使用 LinearBase,或按对数分布,使用 LogBase(默认
LinearBase())。line_to_number_buff数轴与其数字之间的间距,以场景单位计(默认 0.25)。
decimal_number_config数字的 数字关键字(默认 None:与范围步长相同的小数位数)。
numbers_to_exclude刻度编号时不写的数字(默认 None:无;坐标轴的省略 0)。
numbers_to_include要写的数字,替代刻度的数字:给出时,即使没有
include_numbers也会写它们(默认 None:刻度的数字)。color填充和描边共用的颜色(默认白色;Circle 的为 红色);None 表示类的默认值。
tip_lengthnormal_vector路径所在平面的法向量(默认 OUT)。为兼容 Manim 而接受;被忽略且不保留。
tip_style路径所生成尖端的样式关键字(默认 None:无)。除非在此给出,否则尖端的
fill_color和stroke_color取路径的颜色。fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
源码
manimgx\mobjects\plotting.py
刻度¶
数轴的刻度决定其数字的放置方式:均匀放置,或按对数放置。通过 scaling 指定。
LinearBase
¶

代码
import manimgx as m
class LinearBaseExample(m.Scene):
def construct(self) -> None:
plain = m.NumberLine(
x_range=[-3, 3, 1], length=10, include_numbers=True
)
doubled = m.NumberLine(
x_range=[-3, 3, 1],
length=10,
include_numbers=True,
scaling=m.LinearBase(scale_factor=2),
color=m.BLUE,
)
self.add(m.VGroup(plain, doubled).arrange(m.DOWN, buff=1.5))
数轴的均匀刻度:数字沿数轴均匀排列,即其范围的数字乘以 scale_factor。
它是数轴的默认刻度,当因子为 1 时,其数字即为范围的数字。使用其他因子时,数轴保持其长度和刻度不变,而其数字被乘以该因子:使用 2 时,范围 [-2, 2, 1] 从 -4 到 4 以步长 2 编号,且 n2p 将 4 放在其末端。将其作为数轴的 scaling,或在坐标轴配置中作为坐标轴的 scaling。
scale_factor从范围的数字到数轴数字的因子。
源码
manimgx\mobjects\plotting.py
LogBase
¶

代码
import manimgx as m
class LogBaseExample(m.Scene):
def construct(self) -> None:
ax = m.Axes(
x_range=[0, 10, 1],
y_range=[-2, 6, 1],
x_length=11,
y_length=6.5,
tips=False,
axis_config={"include_numbers": True, "font_size": 28},
y_axis_config={"scaling": m.LogBase()},
)
exponential = ax.plot(lambda x: 0.01 * 10 ** (0.8 * x), color=m.BLUE)
square = ax.plot(lambda x: x**2, x_range=[0.1, 10], color=m.YELLOW)
self.add(ax, exponential, square)
数轴的对数刻度:其范围为指数,其数字为 base 的幂,按其对数间隔排列。
以 10 为底时,范围 [0, 3, 1] 从 1 运行到 1000,每个 10 的幂处有一个刻度,且 n2p 将 100 放在沿数轴三分之二的位置。其数字均为正数:0 和负数在它上面没有位置。将其作为数轴的 scaling,或在坐标轴配置中作为坐标轴的 scaling;然后 plot 在幂上对函数采样,且 add_coordinates 将坐标轴的数字写为幂。
base幂的底数。
custom_labels数轴的数字是否写为幂(10²、10³、…),而非小数。
源码
manimgx\mobjects\plotting.py