“ matplotlib-bilibili,抖音很火的动态数据视频自动生成(第三节)-柱形数据视频”
在之前已经告诉大家如何生成会动的数据统计图,这次我们把它应用到数据排行中吧!
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— 完整代码
注意:保存视频,或者保存图片,需要使用到插件,并设置环境变量。
-
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, num
-1, color=
'#adb0ff')
# 绘制水平方向的条形图barh()
-
ax.text(num
-1,
1,
"广东省", size=
14, weight=
600, ha=
'right', va=
'bottom')
#添加文字并设置样式
-
ax.barh(
3, num+
0.1, color=
'#ffb3ff')
-
ax.text(num +
0.1,
3,
"北京省", size=
14, weight=
600, ha=
'right', va=
'bottom')
-
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+
2, color=
'#ffb3ff')
-
ax.text(num+
2,
3,
"北京省", 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()
#移动到函数外才能正常显示
这样,我么就完成了数据动态视频的制作。
相关推荐:
欢迎关注我们:
大家一起学编程
以学习为主,兴趣为辅,致力于开发,发现更多好玩有趣的编程技巧以及好玩有趣的编程思路。为喜欢编程和想要学习编程的人找到编程的乐趣和动力。
下期预告:
给你喜欢的人画一个大大的爱心吧
喜欢就点个赞吧
转载:https://blog.csdn.net/qq_39046854/article/details/115679761
查看评论