信息发布→ 登录 注册 退出

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第三节)

发布时间:2025-09-17

点击量:

在之前的教程中,我们已经学习了如何生成动态的数据统计图,这次我们将这种方法应用于数据排行榜。

01— 柱形图实现

第一步:实现一个最简单的柱形统计图

让我们从一个简单的柱形图开始。

from matplotlib import pyplot  # 导入模块
fig, ax = pyplot.subplots()  # 返回一个包含figure和axes对象的元组,将元组分解为fig和ax两个变量

def graph(num): ax.barh(1, num, color='#adb0ff') # 绘制水平方向的条形图barh() ax.barh(3, num, color='#ffb3ff') # 绘制水平方向的条形图barh() ax.barh(5, num, color='#90d595') # 绘制水平方向的条形图barh() pyplot.show()

graph(1)

实现结果如图所示:我们绘制了三条统计图。

第二步:给每条柱体加上文字

现在我们为每条柱体添加文字。

ax.text(num, 1, "广东省", size=14, weight=600, ha='right', va='bottom')  # 添加文字并设置样式

第三步:解决乱码

由于中文可能会出现乱码,我们需要进行特殊处理。

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams['axes.unicode_minus'] = False

第四步:赋予每条柱形不同的值,使其看起来在变动

我们引入math模块来为柱形图赋予不同的值。

第五步:让我们的数据动起来

我们发现柱形图已经动起来了,但文字仍然静止。如何解决这个问题呢?

from matplotlib import animation
from matplotlib import pyplot
from pylab import mpl
import math

mpl.rcParams['font.sans-serif'] = ["SimHei"] mpl.rcParams['axes.unicode_minus'] = False

fig, ax = pyplot.subplots() # 返回一个包含figure和axes对象的元组,将元组分解为fig和ax两个变量

def graph(num): ax.clear() # 清除,不叠加 ax.barh(1, num, color='#adb0ff') # 绘制水平方向的条形图barh() ax.text(num, 1, "广东省", size=14, weight=600, ha='right', va='bottom') # 添加文字并设置样式 ax.barh(3, num / math.pi, color='#ffb3ff') ax.text(num / math.pi, 3, "北京省", size=14, weight=600, ha='right', va='bottom') ax.barh(5, num / math.tan(1), color='#90d595') ax.text(num / math.tan(1), 5, "云南省", size=14, weight=600, ha='right', va='bottom') pyplot.title('人口工作情况对比') # 添加图标题

animator = animation.FuncAnimation(fig, graph, frames=range(1, 100), interval=1) pyplot.show() # 移动到函数外面,不然不会动态显示

我们继续完善,实现动态效果:

02— 完整代码

注意:保存视频或图片需要使用插件,并设置环境变量。

在Windows上安装ffmpeg:

from matplotlib import animation
from matplotlib import pyplot
from pylab import mpl
import math

mpl.rcParams['font.sans-serif'] = ["SimHei"] mpl.rcParams['axes.unicode_minus'] = False

fig, ax = pyplot.subplots() # 返回一个包含figure和axes对象的元组,将元组分解为fig和ax两个变量

def graph(num): ax.clear() if num == 50: ax.barh(1, 50, color='#adb0ff') # 绘制水平方向的条形图barh() ax.text(50, 1, "广东省", size=14, weight=600, ha='right', va='bottom') # 添加文字并设置样式 if num == 70: ax.barh(3, num - 1, color='#ffb3ff') ax.text(num - 1, 3, "北京省", size=14, weight=600, ha='right', va='bottom') ax.barh(5, num, color='#90d595') ax.text(num, 5, "云南省", size=14, weight=600, ha='right', va='bottom') pyplot.title('人口工作情况对比') # 添加图标题

animator = animation.FuncAnimation(fig, graph, frames=range(1, 100), interval=1) animator.save(filename="数据.gif", writer='pillow') # 保存gif animator.save(filename="数据.mp4") # 保存视频 pyplot.show() # 移动到函数外才能正常显示

通过以上步骤,我们成功完成了动态数据视频的制作。

标签:# 云南省  # 最简单  # 应用于  # 使其  # 北京  # 统计图  # 让我们  # 每条  # 条形图  # windows  # 广东省  # ffmpeg  # math  # matplotlib  # win  # 环境变量  # 抖音  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!