Skip to content

Axes and data ​

Number lines, grids, axis labels, c2p coordinate mapping, area and Riemann rectangles, plus bar charts, matrices and tables.

This page lists 12 examples. The code is imported from corpus/examples/graph/; the screenshots are end states rendered on real machines.

Number line with numbers ​

One number line; ticks and tick numbers agree and the spacing is even.

Number line with numbers

py
"""数轴 + 数字

@expect 一条数轴,刻度与刻度数字对得上、间距均匀。"""

from manim import *


class NumberLineScene(Scene):
    def construct(self):
        line = NumberLine(x_range=[-4, 4, 1], include_numbers=True)
        self.play(Create(line))
        self.wait(0.3)

Plane grid ​

A plane grid with both directions of lines complete and evenly spaced.

Plane grid

py
"""平面网格

@expect 平面网格两个方向的线都齐整,间距一致。"""

from manim import *


class NumberPlaneScene(Scene):
    def construct(self):
        plane = NumberPlane(x_range=[-4, 4, 1], y_range=[-3, 3, 1])
        self.play(Create(plane))
        # 自证等比:对角线若穿过每个网格交点,则横向/纵向格距相等
        diagonal = DashedLine(start=plane.c2p(-4, -3), end=plane.c2p(4, 3), color=YELLOW)
        unit_dot = Dot(point=plane.c2p(1, 1), color=RED)
        label = Text("1×1 单位格", font_size=24).move_to(plane.c2p(2.2, 1.4))
        self.play(Create(diagonal), FadeIn(unit_dot), FadeIn(label))
        self.wait(0.3)

Axes with axis labels ​

Axes with arrow tips and x / y labels; the labels sit at the axis ends.

Axes with axis labels

py
"""坐标轴 + 轴标签

@expect 坐标轴带箭头与 x / y 轴标签,标签贴在轴端。"""

from manim import *


class AxesLabelsScene(Scene):
    def construct(self):
        # 对称范围让原点居中,不缩在角落
        ax = Axes(x_range=[-4, 4, 1], y_range=[-2, 2, 1])
        labels = ax.get_axis_labels(x_label="x", y_label="y")
        self.play(Create(ax))
        self.play(Write(labels))
        self.wait(0.3)

Label on a curve ​

A label hugs its curve without leaving the frame or covering the line.

Label on a curve

py
"""曲线加标签

@expect 曲线旁边贴着它的标签,不出画、不压线。"""

from manim import *


class GraphLabelScene(Scene):
    def construct(self):
        ax = Axes(x_range=[-3, 3, 1], y_range=[-1, 4, 1])
        graph = ax.plot(lambda x: x * x / 3, color=GREEN)
        label = ax.get_graph_label(graph, "x^2/3")
        self.play(Create(ax), Create(graph))
        self.play(Write(label))
        self.wait(0.3)

c2p maps coordinates to canvas positions ​

The marker lands exactly at the position c2p computes; the printed numbers match the picture.

c2p maps coordinates to canvas positions

py
"""c2p 把坐标换算成画布位置

@expect 标记点精确落在 c2p 换算出的坐标位置上(print 的数值与画面一致)。
@note c2p / get_center 返回的是数值数组,适配层必须换成向量,否则 + 会变成列表拼接
"""

from manim import *


class C2pScene(Scene):
    def construct(self):
        ax = Axes(x_range=[-2, 2, 1], y_range=[-2, 2, 1], include_numbers=True)
        line = Line(start=ax.c2p(-2, -2), end=ax.c2p(2, 2), color=YELLOW)
        dot = Dot(point=ax.c2p(1, 1), color=RED)
        # 自证落点:从点向两轴引虚线,MathTex("1") 标出 x=1 / y=1 的位置
        vx = DashedLine(start=ax.c2p(1, 1), end=ax.c2p(1, -2), color=GREY)
        hy = DashedLine(start=ax.c2p(1, 1), end=ax.c2p(-2, 1), color=GREY)
        lx = MathTex("1", font_size=30).move_to([ax.c2p(1, 0)[0], ax.c2p(1, 0)[1] - 0.3, 0])
        ly = MathTex("1", font_size=30).move_to([ax.c2p(0, 1)[0] - 0.3, ax.c2p(0, 1)[1], 0])
        self.play(Create(ax), Create(line), FadeIn(dot), Create(vx), Create(hy), FadeIn(lx), FadeIn(ly))
        self.wait(0.3)

Area under a curve ​

A translucent fill between the curve and the x axis, bounded by the curve segment.

Area under a curve

py
"""曲线下的面积

@expect 曲线与 x 轴之间一块半透明填充,边界就是曲线段。
@note manim-web 的 getArea 把 xRange 放在第二个位置参数,颜色那几项才进选项
"""

from manim import *


class AreaScene(Scene):
    def construct(self):
        ax = Axes(x_range=[0, 4, 1], y_range=[0, 4, 1])
        graph = ax.plot(lambda x: x, color=GREEN)
        area = ax.get_area(graph, x_range=[0, 2], color=BLUE, opacity=0.5)
        self.play(Create(ax), Create(graph), FadeIn(area))
        self.wait(0.3)

Riemann rectangles ​

A row of rectangles along the underside of the curve, heights following the sampled function values.

Riemann rectangles

py
"""黎曼矩形

@expect 一排矩形贴着曲线下沿排开,高度按取样点的函数值。"""

from manim import *


class RiemannScene(Scene):
    def construct(self):
        ax = Axes(x_range=[0, 3, 1], y_range=[0, 3, 1])
        graph = ax.plot(lambda x: x * x / 3, color=GREEN)
        rects = ax.get_riemann_rectangles(graph, x_range=[0, 2], dx=0.4)
        self.play(Create(ax), Create(graph))
        self.play(FadeIn(rects))
        self.wait(0.3)

Bar chart ​

Three bars in red / blue / green with heights matching the data and even spacing; the title sits above without covering the chart.

Bar chart

py
"""柱状图

@expect 三根柱子红 / 蓝 / 绿三色、高低与数据一致、间距均匀,标题在图上方不压图。"""

from manim import *


class BarChartScene(Scene):
    def construct(self):
        chart = BarChart(values=[1, 3, 2], bar_colors=[RED, BLUE, GREEN])
        chart.move_to([0, -0.6, 0])
        # 适配层 bug:bar_colors 不生效,且 set_fill 会连描边一起染——
        # 先逐根 set_fill,再单独 set_stroke 把描边改回同色。
        # 适配层没有 chart.bars:三根柱是 chart 的第 3 个子物体的 3 个孩子
        bars = chart[2]
        for bar, color in zip(bars, [RED, BLUE, GREEN]):
            bar.set_fill(color, opacity=1.0)
            bar.set_stroke(color=color)
        title = Text("三色柱状图", font_size=28, color=WHITE)
        title.move_to([0, 2.6, 0])
        self.play(Create(chart), Write(title))
        self.wait(0.3)

Matrix ​

A matrix laid out by rows and columns; the entries match the input.

Matrix

py
"""矩阵

@expect 矩阵按行列排布,元素与传入内容一致。
@note CE 的 Matrix(*rows) 是位置参数;manim-web 的构造器首参也是数据
"""

from manim import *


class MatrixScene(Scene):
    def construct(self):
        m = Matrix([[1, 2], [3, 4]])
        self.play(Write(m))
        self.wait(0.3)

Table with a header ​

A table with a header row; rows and columns aligned and all grid lines present.

Table with a header

py
"""表格 + 表头

@expect 表格带表头行,行列对齐、格线齐全。
@note CE 的表首参叫 table,manim-web 的键叫 data;单元格要物体(manim-web 不换算数字)
"""

from manim import *


class TableScene(Scene):
    def construct(self):
        grid = Table([[Text("1"), Text("2")], [Text("3"), Text("4")]], col_labels=[Text("甲"), Text("乙")])
        self.play(FadeIn(grid))
        self.wait(0.3)

IntegerTable (numbers written directly) ​

Integers fill the cells directly (no LaTeX number formatting); the contents match.

IntegerTable (numbers written directly)

py
"""整数表(直接写数字)

@expect 整数直接填进格子(不经过 LaTeX 数字格式化),内容一致。
@note 纯数字的表走 IntegerTable / DecimalTable——它们才收原始数字
"""

from manim import *


class IntegerTableScene(Scene):
    def construct(self):
        grid = IntegerTable([[1, 2], [3, 4]])
        self.play(FadeIn(grid))
        self.wait(0.3)

LaTeX table ​

The table content is typeset as LaTeX (math fonts), not plain text fonts.

LaTeX table

py
"""LaTeX 表

@expect 表格内容按 LaTeX 排版(公式字体),不是普通文本字体。
@note MathTable 收 LaTeX 字符串,manim-web 自己排成公式
"""

from manim import *


class MathTableScene(Scene):
    def construct(self):
        grid = MathTable([[r"\frac{1}{2}", r"\sqrt{3}"], [r"a^2", r"b^2"]])
        self.play(FadeIn(grid))
        self.wait(0.3)

MIT licensed · Manim 与 Pyodide 各依其自身许可(见「安装」)