在之前的教程中,我们已经学习了如何生成动态的数据统计图,这次我们将这种方法应用于数据排行榜。
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 mathmpl.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 mathmpl.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() # 移动到函数外才能正常显示
通过以上步骤,我们成功完成了动态数据视频的制作。











