资讯详情

资讯详情

数据驱动动画实战:Manim 图表、图论与矢量场可视化完全指南(video-use · manim-video)

AI 技能/插件音视频视频处理人工智能【免费下载链接】video-useEdit videos with coding agents项目地址https://gitcode.com/GitHub_Trending/vid/video-use点击查看免费下载本指南以 skills/manim-video/references/graphs-and-data.md 为核心骨架系统讲解用 Manim Community Edition 制作坐标轴、函数曲线、柱状图、动态计数器、算法可视化、图论与矢量场等数据类动画的完整技法。在 video-use 项目中这套技能是「算法可视化」与「数据故事」两种视频模式的底层动画引擎见 SKILL.md 的 Modes 表。读完本文你将掌握从搭建坐标轴到驱动动态参数、再到图论与矢量场渲染的每一段可运行代码并能把数据动画作为 overlay 叠加进最终的final.mp4成片。环境准备在 video-use 中启用 Manim 动画槽本参考文档面向 Manim Community Edition v0.20文档中的 API 在 Manim CE v0.20.1 上验证通过见 manim-video/SKILL.md 的 Prerequisites。前置依赖包括Python 3.10Manim CEpip install manimLaTeXLinux 用texlive-fullmacOS 用mactex用于MathTex渲染公式ffmpeg用于场景拼接与格式转换仓库提供了依赖自检脚本 skills/manim-video/scripts/setup.sh它会依次检查python3、manim、pdflatex、ffmpeg四个命令是否就绪并汇总缺失项bash skills/manim-video/scripts/setup.sh在 video-use 的动画工作流中每个 Manim 动画是edit/animations/slot_id/下的一个独立槽位子 Agent 在槽目录内编写场景脚本、渲染出render.mp4再由render.py依据 EDL 中的overlays字段以setptsPTS-STARTPTST/TB平移到输出时间轴上的指定窗口详见 SKILL.md 的 Animations 章节。本指南的所有代码片段都对应这类槽位中可独立渲染的Scene子类。Axes数据可视化的地基任何图表动画的第一步都是搭建坐标系。Axes负责把数学坐标映射到屏幕坐标后续的plot、get_area、c2p都以它为基准axes Axes( x_range[-3, 3, 1], y_range[-2, 2, 1], x_length8, y_length5, axis_config{include_numbers: True, font_size: 24} ) axes.set_opacity(0.15) # structural element x_label axes.get_x_axis_label(rx)参数语义如下参数取值作用x_range/y_range[min, max, step]数学坐标系的范围与刻度步长如[-3, 3, 1]表示从 -3 到 3、每 1 个单位一个刻度x_length/y_length数值屏幕单位坐标轴在屏幕上的像素长度决定图表在画面中的占比axis_config字典透传给坐标轴的配置include_numbersTrue显示刻度数字font_size控制刻度字号这里有一个贯穿整个技能的设计约定值得注意结构元素要降透明度。在 visual-design.md 的视觉层次清单 中主元素亮度为 1.0、上下文元素为 0.3–0.4、结构性元素坐标轴、网格为 0.15。axes.set_opacity(0.15)正是这一原则的落实——坐标轴是参照系而非主角让观众的目光始终落在数据曲线上。同理刻度字号 24 也对应 SKILL.md 的排版字号表 中的 Label 档。Plotting函数绘图三板斧在坐标轴上绘制函数是数据动画的核心操作Manim 提供了曲线、标签、面积三个配套 APIgraph axes.plot(lambda x: x**2, colorBLUE) graph_label axes.get_graph_label(graph, labelrx^2, x_val2) area axes.get_area(graph, x_range[0, 2], colorBLUE, opacity0.3)axes.plot(func, color...)接受一个 Python 可调用对象lambda 或np.sin等在坐标轴范围内采样生成曲线 mobjectget_graph_label(graph, label..., x_val...)把标签放置在曲线上指定 x 位置附近label用 LaTeX 原始字符串书写r...前缀是硬性要求见 SKILL.md 的 Critical Implementation Notesget_area(graph, x_range[0, 2], ...)生成曲线与 x 轴围成的填充区域配合低透明度0.3即可实现「积分面积」的经典视觉。x_range的[min, max, step]三元组、axis_config字典、以及透明度分层结构 0.15 / 面积填充 0.3构成了整套图表动画的可复用视觉语言。从源码结构看get_area返回的是由曲线与坐标轴闭合而成的填充 mobject因此它可以像普通 mobject 一样被always_redraw重建——这正是下一节动态绘图的基础。Animated Plotting让曲线活起来数据动画的价值在于「过程」。Manim 提供三种由浅入深的动态手法描线、轨迹移动、参数驱动。描线Create——Create(graph)沿曲线轮廓逐段绘制是「函数如何被画出」的直观演示self.play(Create(graph), run_time3) # trace the graph轨迹移动MoveAlongPath——让一个小圆点沿曲线滑行配合axes.c2p把数学坐标换算成屏幕坐标# Moving dot along curve dot Dot(colorYELLOW).move_to(axes.c2p(0, 0)) self.play(MoveAlongPath(dot, graph), run_time3)MoveAlongPath接受任意VMobject作为路径位置由path.point_from_proportion()计算见 animations.md。动态参数ValueTracker always_redraw——这是数据动画最强大的模式用一个不可见的ValueTracker充当「滑块」让曲线随参数实时变形# Dynamic parameter tracker ValueTracker(1) dynamic always_redraw(lambda: axes.plot(lambda x: tracker.get_value() * x**2, colorBLUE)) self.add(dynamic) self.play(tracker.animate.set_value(3), run_time2)其原理在 updaters-and-trackers.md 中有完整阐述ValueTracker是一个不出现在画面上的 mobject只存一个浮点数always_redraw让 Manim每一帧15–60 fps取决于渲染质量都重新执行 lambda 重建 mobject。这里的执行链条是创建tracker隐形滑块创建读取 tracker 的可视对象always_redraw(lambda: axes.plot(...))self.play(tracker.animate.set_value(3))平滑推动滑块曲线自动跟随。注意always_redraw每次都会完整重建 mobject适合「结构随参数变化」的场景若只是位置、颜色等属性变化用add_updater更省性能详见 updaters-and-trackers.md 的取舍建议。另外用always_redraw创建的对象仍需self.add()加入场景否则更新器不会运行。Bar Charts柱状图的创建与数值突变BarChart是数据故事中最常用的现成图表 mobject一条命令即可生成一组可动画的柱体chart BarChart( values[4, 6, 2, 8, 5], bar_names[A, B, C, D, E], y_range[0, 10, 2], bar_colors[RED, GREEN, BLUE, YELLOW, PURPLE] ) self.play(Create(chart), run_time2) self.play(chart.animate.change_bar_values([6, 3, 7, 4, 9]))参数作用values每个柱子的初始数值列表bar_names柱底部的名称标签y_range纵轴范围与刻度步长[min, max, step]控制柱体高度比例bar_colors逐柱颜色列表与values一一对应chart.animate.change_bar_values([...])会在动画时间内平滑地把每根柱子拉伸/压缩到新数值——这是「数据前后对比」「增长演示」的核心原语。配合Create(chart)的逐柱勾勒入场柱状图动画只需两行self.play即可完成。Number Lines数轴与指针联动数轴NumberLine适合展示一维数值的定位与滑动配合n2pnumber-to-point数值转屏幕坐标和 updater 实现指针联动nl NumberLine(x_range[0, 10, 1], length10, include_numbersTrue) pointer Arrow(nl.n2p(3) UP * 0.5, nl.n2p(3), colorRED, buff0) tracker ValueTracker(3) pointer.add_updater(lambda m: m.put_start_and_end_on( nl.n2p(tracker.get_value()) UP * 0.5, nl.n2p(tracker.get_value()))) self.play(tracker.animate.set_value(8), run_time2)这里示范了add_updater的标准写法箭头指针注册一个 lambda updater每帧用nl.n2p(tracker.get_value())重新计算起点与终点因此动画tracker时指针始终指向当前数值。buff0让箭头尖端紧贴数轴。相较always_redraw的整对象重建add_updater只更新位置属性是「属性级联动」的首选updaters-and-trackers.md。Animated Counters动态计数器与节奏控制计数器是数据故事的点睛之笔——用数字的跳动制造「增长感」counter DecimalNumber(0, font_size72, num_decimal_places0) self.play(counter.animate.set_value(1000), run_time3, rate_funcrush_from)DecimalNumber是专门显示数字的 mobjectnum_decimal_places控制小数位0 即整数1 可显示一位小数counter.animate.set_value(1000)在run_time3秒内从 0 平滑增长到 1000rate_funcrush_from是速率函数——先快后慢让数字「冲刺」后稳稳落在终值制造收束感。速率函数是动画节奏的核心旋钮smooth默认缓入缓出、linear匀速、rush_into先慢后快、rush_from先快后慢、there_and_back去而复返等可查 animations.md 的 Rate Functions 一节。在 video-use 的动画节奏规范中SKILL.md 的 Animations 章节同步解说类动画的计数器通常持续 5–7 秒动画结束后必须self.wait()让观众消化。Algorithm Visualization Pattern算法可视化的标准骨架参考文档给出了一套算法可视化的核心模式——用矩形柱体表示数组LaggedStart逐根生长入场随后自由组合高亮、交换等操作values [5, 2, 8, 1, 9, 3] bars VGroup(*[ Rectangle(width0.6, heightv * 0.4, colorBLUE, fill_opacity0.7) for v in values ]).arrange(RIGHT, buff0.2, aligned_edgeDOWN).move_to(ORIGIN) self.play(LaggedStart(*[GrowFromEdge(b, DOWN) for b in bars], lag_ratio0.1)) # Highlight, swap, etc.拆解这个骨架VGroup(*[...])把 6 个Rectangle聚合成组每个矩形的高度由数值缩放而来v * 0.4fill_opacity0.7让柱体有明确的填充.arrange(RIGHT, buff0.2, aligned_edgeDOWN)让柱体以底部对齐、向右排布buff0.2控制柱间距LaggedStart(*[GrowFromEdge(b, DOWN) for b in bars], lag_ratio0.1)让每根柱子从下往上生长且相邻两根的入场有 10% 时间差形成波浪式入场。lag_ratio与AnimationGroup、Succession等组合动画的区别见 animations.md 的 Composition 一节LaggedStart适合「同一组对象错峰呈现」而ShowIncreasingSubsets则适合逐元素揭示数组内容算法讲解中常与高亮、交换动画搭配。在 video-use 的技能定位中「算法可视化」模式如 quicksort 逐步执行正是这一模式的典型用例SKILL.md Modes 表。Data Story Pattern数据故事与前后对比数据故事的核心叙事是「before / after 对比」。参考文档给出了一个完整的对比段落范式两个柱状图分列左右中间用箭头建立方向再叠加一个百分比标签点明「增长」# Before/After comparison before BarChart(values[3, 5, 2], bar_colors[RED]*3).shift(LEFT * 3) after BarChart(values[8, 9, 7], bar_colors[GREEN]*3).shift(RIGHT * 3) self.play(Create(before)); self.wait(1) self.play(Create(after)); self.wait(1) arrow Arrow(before.get_right(), after.get_left(), colorYELLOW) label Text(167%, font_size36, colorYELLOW).next_to(arrow, UP) self.play(GrowArrow(arrow), Write(label))值得注意的细节颜色即语义[RED]*3与[GREEN]*3分别表示「改善前 / 改善后」呼应 visual-design.md 的「Color Meaning」原则空间即关系shift(LEFT * 3)/shift(RIGHT * 3)让对比物分居左右箭头用before.get_right()和after.get_left()精确连接两个图表节奏留白每个Create之后都有self.wait(1)让观众先看清「前」再看「后」——对应 SKILL.md 的 Creative Standard「Breathing room」强调动画GrowArrow让箭头从起点生长到终点Write逐笔写出167%标签把数值变化变成叙事高潮。这个模式可以直接套用到 video-use 的数据故事槽位只要把167%换成真实指标配合 SKILL.md 中约定的缓动函数单次揭示用ease_out_cubic连续绘制用ease_in_out_cubic即可产出风格统一的数据 overlay。Graph / DiGraph图论可视化的自动布局对于图论类内容状态机、网络、依赖关系Manim 内置的Graph/DiGraph提供自动布局算法无需手工计算节点坐标# Undirected graph g Graph( vertices[1, 2, 3, 4, 5], edges[(1, 2), (2, 3), (3, 4), (4, 5), (5, 1), (1, 3)], layoutspring, # or circular, kamada_kawai, planar, tree labelsTrue, vertex_config{fill_color: PRIMARY}, edge_config{stroke_color: SUBTLE}, ) self.play(Create(g)) # Directed graph dg DiGraph( vertices[A, B, C], edges[(A, B), (B, C), (C, A)], layoutcircular, labelsTrue, edge_config{(A, B): {stroke_color: RED}}, ) # Add/remove vertices and edges dynamically self.play(g.animate.add_vertices(6, positions{6: RIGHT * 2})) self.play(g.animate.add_edges((1, 6))) self.play(g.animate.remove_vertices(3))要点说明vertices/edges分别声明顶点与边边用顶点元组表示DiGraph的边(A, B)表示有向弧layout选择自动布局算法可选spring力导向、circular环形、kamada_kawai、planar平面、spectral谱布局、tree树形有根树需额外指定rootvertex_config/edge_config支持全局样式也可用字典键到配置的映射对单个顶点/边单独着色如edge_config{(A, B): {stroke_color: RED}}。注意PRIMARY、SUBTLE是技能约定的自定义颜色常量在脚本顶部定义见 SKILL.md 的 Workflow 示例不是 Manim 内建色g.animate.add_vertices(...)/add_edges(...)/remove_vertices(...)支持在动画中动态增删顶点与边配合positions{6: RIGHT * 2}可指定新顶点的落点——这是「逐步构建状态机」「网络动态演化」的关键能力。从仓库的技能定位看SKILL.md 的 Animations 工具选项Manim 正是被指定用于「formal diagrams, state machines, equation derivations, graph morphs」——图论可视化是 Manim 槽位的核心使用场景。ArrowVectorField / StreamLines矢量场与流线物理与数学类内容电磁场、流体、梯度场、ODE 相图需要矢量场可视化。Manim 提供两个互补工具ArrowVectorField在每个采样点画方向箭头StreamLines则生成沿场流动的粒子轨迹# Arrow field: arrows showing direction at each point field ArrowVectorField( lambda pos: np.array([-pos[1], pos[0], 0]), # rotation field x_range[-3, 3], y_range[-3, 3], colors[BLUE, GREEN, YELLOW, RED] ) self.play(Create(field)) # StreamLines: flowing particle traces through the field stream StreamLines( lambda pos: np.array([-pos[1], pos[0], 0]), stroke_width2, max_anchors_per_line30 ) self.add(stream) stream.start_animation(warm_upTrue, flow_speed1.5) self.wait(3) stream.end_animation()场函数lambda pos: np.array([-pos[1], pos[0], 0])返回每个位置处的向量——这里是一个旋转场逆时针涡旋可替换为任意pos - vector的映射ArrowVectorField的x_range/y_range控制采样网格范围colors是随向量长度/方向插值的颜色梯度StreamLines的stroke_width控制线条粗细max_anchors_per_line限制每条流线的锚点数量影响平滑度与性能流线动画分三步start_animation(warm_upTrue, flow_speed1.5)启动粒子流动warm_up预热填充、flow_speed控制流速、self.wait(3)让流动持续、end_animation()收尾定格。参考文档明确列出的适用场景电磁场、流体流动、梯度场、ODE 相图graphs-and-data.md。这类动画信息密度高按 SKILL.md 的动画时长经验值复杂图形建议 8–14 秒且结尾定格至少 1 秒。ComplexPlane / PolarPlane复平面与极坐标数学教学的进阶场景——复变函数与极坐标。ComplexPlane把复平面坐标与屏幕坐标打通n2p接受复数直接定位# Complex plane with Re/Im labels cplane ComplexPlane().add_coordinates() dot Dot(cplane.n2p(2 1j), colorYELLOW) label Text(2i, font_size20).next_to(dot, UR, buff0.1) # Apply complex function to the plane self.play(cplane.animate.apply_complex_function(lambda z: z**2), run_time3) # Polar plane polar PolarPlane(radius_max3).add_coordinates()add_coordinates()为平面添加坐标刻度标签复平面的 Re/Im 轴极平面的角度与半径刻度cplane.n2p(2 1j)把复数2 i映射为屏幕坐标apply_complex_function(lambda z: z**2)则对整个复平面逐点施加复函数变换——这是演示「复函数如何扭曲平面」的招牌动画如模平方映射的经典变形PolarPlane(radius_max3)构建半径最大为 3 的极坐标平面适合周期函数、相量、极坐标积分等主题。渲染与交付把数据动画送进成片编写完场景类后渲染遵循 manim-video/SKILL.md 的 PipelinePLAN → CODE → RENDER → STITCH → AUDIO → REVIEW。渲染命令与质量档位如下完整 CLI 参考见 rendering.mdmanim -ql script.py Scene1 Scene2 # draft854x48015fps迭代布局与节奏 manim -qm script.py Scene1 # medium1280x72030fps文本密集场景预览 manim -qh script.py Scene1 # production1920x108060fps最终交付 manim -ql --formatpng -s script.py Scene1 # 预览末帧静态图质量档分辨率FPS用途-ql854×48015草稿迭代布局、时序5–15 秒/场景-qm1280×72030预览文本密集场景建议在此档检查-qh1920×108060生产输出30–120 秒/场景技能规范要求始终在-ql迭代只在最终输出时渲染-qh数据图表中文本较多刻度与标签的清晰度建议在-qm档预览确认480p 下小字号易糊。渲染产物位于media/videos/script/quality/之后在 video-use 中由render.py读取 EDL 的overlays字段把每个 Manim 槽位的render.mp4按start_in_output/duration平移到时间轴并叠加到主视频之上最后烧录字幕字幕必须在所有 overlay 之后应用见 SKILL.md Hard Rule 1。小结从参考文档到可交付的数据动画本文完整覆盖了 graphs-and-data.md 的全部内容并将其嵌入 video-use 的动画生产语境坐标轴Axes是一切图表的地基plot/get_area/BarChart覆盖函数与柱状图ValueTrackeralways_redraw/add_updater实现动态参数与联动Graph/ArrowVectorField/StreamLines/ComplexPlane将图论、矢量场与复变内容纳入表达范围算法可视化与数据故事两种模式则给出了可直接套用的段落骨架。继续深入可查阅仓库内配套文档animations.md动画原语与速率函数、updaters-and-trackers.md更新器与 ValueTracker 的完整模式、visual-design.md配色与视觉层次、scene-planning.md叙事弧线与场景清单、rendering.md渲染与交付细节以及技能总纲 skills/manim-video/SKILL.md。赞分享AI 技能/插件音视频视频处理人工智能【免费下载链接】video-useEdit videos with coding agents项目地址https://gitcode.com/GitHub_Trending/vid/video-use点击查看免费下载相关推荐用 Manim Community Edition 构建 3Blue1Brown 风格动画视频生产流水线video-use 仓库 manim-video 技能完全指南用 Manim Community Edition 构建 3Blue1Brown 风格动画视频生产流水线video use 仓库 manim video 技能AI 技能/插件音视频视频处理人工智能Manim 渲染故障排查实战指南video-use manim-video 技能的 Troubleshooting 全解Manim 渲染故障排查实战指南video use manim video 技能的 Troubleshooting 全解 导读 本指南以 video useAI 技能/插件音视频视频处理人工智能终极Manim数据可视化完全指南如何制作惊艳的数学图表动画终极Manim数据可视化完全指南如何制作惊艳的数学图表动画 Manim是一款强大的数学动画引擎专为创建解释性数学视频而设计。无论是教学演示、学术研究还是科普图形学音视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →