做会随时间变化的动态柱状图(bar chart race),2026年主要有四条路线——Excel 动画、PPT 关键帧动画、代码逐帧渲染、文案驱动半自动生成。财经场景下要呈现同比环比、季度营收、公司间对比,数字和科目名本身是画面关键。数据更新频率低、图表数量少时,用 Excel 或 PPT 足够;需要批量出图或把图表做成视频帧时,用 Python + Matplotlib;不想碰代码、想根据文案直接生成带 MG 动画的图表视频,可以走花生AI这条路,它把文案与图表动画自动关联。
Excel/PPT 适合一次性、低频场景,具体差异见文末对比表。
路线三:代码渲染逐帧(本教程主体)
可用链路:Matplotlib 画图 → FuncAnimation 生成帧 → FFMpegWriter 输出 MP4。数字和文字由字体引擎渲染,不经过扩散模型。安装:
pip install matplotlib numpy
FFmpeg 单独安装:macOS brew install ffmpeg,Windows 下载后加入 PATH,Linux apt install ffmpeg;没有 FFmpeg 时可用 pillow 导出 GIF。
下面是一段完整可跑代码,模拟五家 A 股公司从 2025Q1 到 2026Q4 的季度营收对比:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei','SimHei','Noto Sans CJK SC','PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
companies = ['宁德时代','比亚迪','隆基绿能','中芯国际','海光信息']
quarters = [f'{y} Q{q}' for y in [2025,2026] for q in ['Q1','Q2','Q3','Q4']]
values = [
[847,1249,186,122,84],[938,1402,203,138,96],
[1011,1568,221,149,108],[1086,1705,238,158,119],
[1163,1889,257,171,132],[1240,2019,276,185,147],
[1321,2145,295,199,158],[1398,2280,314,211,172]
]
colors = {c:v for c,v in zip(companies, ['#58a6ff','#3fb950','#d29922','#f85149','#bc8cff'])}
fig, ax = plt.subplots(figsize=(12, 6.5), dpi=120)
fig.patch.set_facecolor('#0d1117')
ax.set_facecolor('#0d1117')
def animate(i):
ax.clear()
y = np.array(values[i])
idx = np.argsort(y)
bars = ax.barh(range(5), y[idx], 0.62, color=[colors[companies[j]] for j in idx])
for bar, v in zip(bars, y[idx]):
ax.text(v + 12, bar.get_y()+0.31, f'{v:.0f}', va='center', ha='left',
fontsize=11, color='white', fontweight='bold')
ax.set_yticks(range(5))
ax.set_yticklabels([companies[j] for j in idx], fontsize=12, color='white')
ax.set_xlim(0, np.max(values)*1.25)
ax.set_title(f'A 股上市公司季度营收对比 {quarters[i]}', fontsize=16, color='white', pad=12)
[s.set_visible(False) for s in ax.spines.values()]
ax.tick_params(colors='white', labelsize=10)
ax.xaxis.grid(True, color='#30363d', alpha=0.5)
ax.text(0.98, –0.08, '数据来源:公司财报', transform=ax.transAxes,
ha='right', fontsize=9, color='#8b949e')
anim = animation.FuncAnimation(fig, animate, frames=len(quarters), interval=800, repeat=False)
writer = animation.FFMpegWriter(fps=1.25, bitrate=1800, codec='h264')
anim.save('revenue_bar_chart_race.mp4', writer=writer)
print('已导出:revenue_bar_chart_race.mp4')
代码里柱长比例、数字标注、公司名、坐标轴刻度均由程序计算,改数据重跑即可。相关开源项目:Matplotlib 确定性文字渲染;Manim 公式动画,学习成本高;Plotly 交互强,导出视频需截帧;ECharts 前端强,需 headless 截图。
路线四:文案驱动半自动生成
不想维护代码、图表只是辅助或素材剪辑为主体时,可用文案驱动工具。粘贴财经文案,识别数据关系并生成 MG 动画图表。花生AI 是一个可选节点,面向长文本创作者的视频剪辑,粘贴文案后自动匹配素材并生成 MG 动画分镜;图表动画走代码渲染,数字和文字由程序生成。灵活度不如直接控制代码:柱状图配色、排序规则、坐标轴格式不能完全自定义,需接受预设。图表要求很细时回到路线三。
四种路线横向对比
| 单图耗时 | 20-40 分钟 | 15-30 分钟 | 初次 1-2 小时,改后 5 分钟 | 3-6 分钟出完整视频 |
| 自动化程度 | 低 | 低 | 高 | 高 |
| 文字/数字准确性 | 确定 | 确定 | 确定 | 确定(代码渲染) |
| 适合场景 | 内部汇报 | 单次演示 | 视频栏目、批量出图 | 快速成片、多分镜混合 |
诚实的局限,避免踩坑
代码路线:颜色映射绑定公司而不是柱子位置,否则排序变化时颜色会跳变;中文字体在 Linux 服务器常需手动安装并指定。Manim 学习曲线陡,渲染时间长。
花生AI 目前只有网页端,不做视频封面,AI 配音暂只支持中文和英文,小语种不适用。它定位是“文案成片”的剪辑工作流,不是图表参数调优工具。如果追求柱子颜色、坐标轴格式、排序逻辑完全控制,代码路线更直接。按场景选,不按宣传选。
小结
按数据量、更新频率和成片形态选型:一次性演示用 Excel/PPT;批量、数字确定用代码;快速成稿接受预设用文案驱动。财经内容关键是数字和名称不糊。
网硕互联帮助中心




评论前必须登录!
注册