零基础到精通:Python数学动画与公式可视化的代码绘图方法
你是否曾因静态公式难以展示函数变化过程而苦恼?是否想让几何证明步骤像电影一样生动呈现?如何用简单代码将抽象数学概念转化为直观动画?Manim作为一款强大的数学可视化工具,正是解决这些问题的理想选择。本文将带你从零基础开始,掌握用Manim制作专业数学动画的核心技能,让你的数学教学、学术展示和知识分享更具吸引力。
🧩 基础入门:Manim环境搭建与第一个动画
安装Manim的详细步骤
要开始使用Manim创建数学动画,只需完成以下三个步骤:
- 克隆项目仓库
git clone https://gitcode.com/GitHub_Trending/ma/manim
cd manim
✅ 完成标记:成功下载项目文件并进入manim目录
- 安装依赖包
pip install -r requirements.txt
⚠️ 注意事项:建议使用Python 3.7及以上版本,国内用户可添加-i https://pypi.tuna.tsinghua.edu.cn/simple加速下载
- 创建并运行动画代码
在项目根目录创建
my_first_animation.py文件,输入以下代码:
from manimlib.scene.scene import Scene
from manimlib.mobject.geometry import Circle
from manimlib.animation.creation import ShowCreation
class BasicCircle(Scene):
def construct(self):
circle = Circle(radius=2, color="#58C4DD") # 创建半径为2的蓝色圆形
self.play(ShowCreation(circle), run_time=2) # 2秒内创建圆形
self.wait(1) # 保持画面1秒
运行命令:
python -m manimlib my_first_animation.py BasicCircle -pl
✅ 完成标记:成功生成并播放一个蓝色圆形的创建动画
常见环境问题解决方法
| 问题描述 | 解决方案 |
|---|---|
| 中文显示乱码 | 修改manimlib/default_config.yml,设置text_font: "SimHei"和tex_font: "SimHei" |
| 缺少ffmpeg错误 | 安装ffmpeg:sudo apt-get install ffmpeg(Linux)或通过ffmpeg官网下载安装 |
| 渲染速度慢 | 使用-l参数生成低分辨率预览,定稿后用-h生成高清视频 |
🎯 核心功能:Manim三大模块详解
数学对象模块的使用方法
功能定位:提供构建动画所需的各种数学元素,如几何图形、坐标系、公式等。
应用场景:创建动画的基础元素,所有可见的数学对象都来自此模块。
实现效果:通过简单代码创建复杂的数学可视化元素。
from manimlib.mobject.geometry import Square, Triangle
from manimlib.mobject.three_dimensions import ThreeDAxes
from manimlib.mobject.svg.tex_mobject import TexMobject
def construct(self):
# 创建基本几何图形
square = Square(side_length=2, fill_color="#F2C94C", fill_opacity=0.7)
# 创建三维坐标系
axes = ThreeDAxes()
# 创建LaTeX公式
formula = TexMobject(r"\int_{a}^{b} f(x) \, dx = F(b) - F(a)")
# 组合对象
self.add(square, axes, formula)
动画系统模块的使用方法
功能定位:提供各类动画效果,控制对象的显示、变换和运动。
应用场景:让静态数学对象动起来,展示变化过程和关系。
实现效果:创建流畅的动画序列,展示数学概念的动态变化。
from manimlib.animation.composition import AnimationGroup
from manimlib.animation.transform import Transform
from manimlib.animation.fading import FadeOut
def construct(self):
circle = Circle()
square = Square()
# 组合动画:同时创建圆形和方形
self.play(AnimationGroup(
ShowCreation(circle),
ShowCreation(square),
run_time=2
))
# 变换动画:圆形变方形
self.play(Transform(circle, square))
# 淡出动画
self.play(FadeOut(circle), FadeOut(square))
场景管理模块的使用方法
功能定位:控制动画流程,管理多个场景和交互。
应用场景:组织复杂动画结构,实现场景切换和用户交互。
实现效果:创建连贯的动画叙事,支持交互式数学演示。
from manimlib.scene.interactive_scene import InteractiveScene
from manimlib.mobject.geometry import Dot
class InteractiveDemo(InteractiveScene):
def construct(self):
self.add(Text("点击屏幕添加点"))
def on_mouse_press(self, point):
# 在点击位置添加点
self.add(Dot(point, color="#FF6B6B"))
使用Manim创建的函数图像与积分可视化,展示了曲线、矩形逼近和切线关系的动态变化过程
🛠️ 实战技巧:三种典型应用场景
几何证明的动态演示方法
几何证明往往需要展示步骤间的逻辑关系,Manim可以将静态证明转化为动态过程:
from manimlib.mobject.geometry import Polygon, Line
from manimlib.animation.creation import DrawBorderThenFill
from manimlib.animation.indication import Indicate
class PythagoreanTheorem(Scene):
def construct(self):
# 创建直角三角形
triangle = Polygon(
[0, 0, 0], [3, 0, 0], [0, 4, 0],
fill_color="#A7D7C5", fill_opacity=0.5
)
# 创建边的平方
square_a = Square(side_length=3).next_to(triangle, DOWN)
square_b = Square(side_length=4).next_to(triangle, RIGHT)
square_c = Square(side_length=5).shift(RIGHT*4 + UP*1)
# 绘制三角形并高亮直角
self.play(DrawBorderThenFill(triangle))
right_angle = Line([0,0,0], [0,1,0], color="RED")
right_angle2 = Line([0,0,0], [1,0,0], color="RED")
self.play(ShowCreation(right_angle), ShowCreation(right_angle2))
# 依次创建三个正方形
self.play(DrawBorderThenFill(square_a))
self.play(DrawBorderThenFill(square_b))
self.play(DrawBorderThenFill(square_c))
# 高亮面积关系
self.play(Indicate(square_a), Indicate(square_b))
self.wait(1)
self.play(Indicate(square_c))
函数变换的可视化方法
展示函数如何随参数变化是数学教学中的难点,Manim可以让这一过程直观可见:
from manimlib.mobject.functions import FunctionGraph
from manimlib.mobject.number_line import NumberLine
from manimlib.animation.update import UpdateFromFunc
import numpy as np
class FunctionTransformation(Scene):
def construct(self):
# 创建坐标系
axes = Axes(x_range=[-5, 5], y_range=[-5, 5])
self.add(axes)
# 初始函数
func = lambda x: x**2
graph = FunctionGraph(func, color="#4D8C57")
self.add(graph)
# 创建参数值显示
a_value = ValueTracker(1)
a_text = TexMobject(r"a = 1").to_corner(UL)
# 更新函数的方法
def update_graph(graph):
new_func = lambda x: a_value.get_value() * x**2
new_graph = FunctionGraph(new_func, color="#4D8C57")
graph.become(new_graph)
graph.add_updater(update_graph)
self.add(a_text, graph)
# 动画改变参数a
self.play(a_value.set_value, 2, run_time=3)
self.play(a_value.set_value, 0.5, run_time=3)
self.play(a_value.set_value, -1, run_time=3)
数据可视化的动态呈现方法
Manim不仅能展示数学概念,还能创建动态数据可视化效果:
from manimlib.mobject.changing import BarChart
class DynamicBarChart(Scene):
def construct(self):
# 创建初始柱状图
chart = BarChart(
values=[1, 3, 2, 5, 4],
bar_names=["A", "B", "C", "D", "E"],
y_range=[0, 6]
)
self.add(chart)
# 更新数据的动画
self.play(chart.animate.change_bar_values([2, 4, 3, 6, 5]))
self.wait(1)
self.play(chart.animate.change_bar_values([3, 2, 5, 4, 6]))
self.wait(1)
使用Manim创建的透明叠加图形,展示多层函数关系和几何变换效果
🔄 常见效果对比:静态vs动态
| 内容类型 | 静态展示 | 动态动画 |
|---|---|---|
| 函数图像 | 单一状态,无法展示变化过程 | 可展示参数变化对函数形状的影响 |
| 几何证明 | 需多张图片或复杂标注 | 可逐步构建图形,高亮关键步骤 |
| 数据分布 | 固定图表,难以比较 | 可动态更新数据,展示趋势变化 |
| 三维模型 | 固定视角,缺乏立体感 | 可交互式旋转,全方位观察 |
📈 学习路径图:从入门到精通
-
基础阶段(1-2周)
- 掌握环境搭建和基本语法
- 学习创建简单几何图形和动画
- 完成5个基础示例场景
-
进阶阶段(2-4周)
- 学习复杂动画组合和场景管理
- 掌握坐标系和函数可视化
- 实现1个完整的数学概念演示
-
精通阶段(1-2个月)
- 学习3D场景和交互功能
- 掌握自定义动画和高级效果
- 完成一个综合性数学可视化项目
📚 资源拓展:继续学习的参考资料
官方文档与示例
- 官方文档:项目中的
docs/source/目录包含详细的功能说明和使用指南 - 示例代码:
example_scenes.py文件提供了从基础到高级的代码模板 - 配置文件:
manimlib/default_config.yml可自定义字体、分辨率等参数
实用工具与社区资源
- 在线编辑器:可配合Jupyter Notebook使用,实时预览效果
- 社区论坛:Manim用户社区有丰富的问题解答和创意分享
- 视频教程:搜索"Manim教程"可找到大量入门和进阶视频
通过本文的学习,你已经掌握了Manim数学动画制作的基础知识和核心技能。无论是教学演示、学术研究还是科普创作,Manim都能帮助你将抽象的数学概念转化为生动直观的视觉体验。继续实践和探索,你将能够创造出更加精彩的数学可视化作品!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0135- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
MiniCPM-V-4.6这是 MiniCPM-V 系列有史以来效率与性能平衡最佳的模型。它以仅 1.3B 的参数规模,实现了性能与效率的双重突破,在全球同尺寸模型中登顶,全面超越了阿里 Qwen3.5-0.8B 与谷歌 Gemma4-E2B-it。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
MusicFreeDesktop插件化、定制化、无广告的免费音乐播放器TypeScript00