【1】引言
在前面的学习过程中,已经探索过二维柱状图和三维柱状图的绘制教程,包括且不限于的文章链接有:
python画图|水平直方图绘制_绘制水平直方图-CSDN博客
python画图|3D bar进阶探索_ax.bar3d-CSDN博客
此外也学习了动态的直线输出和散点图输出:
python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客
python画图|散点图动态输出_python散点图配色-CSDN博客
在此基础上,很容易启发我们画动态输出的柱状图。
【2】项目设计
开发一个新项目,往往采取类比演绎的方式来提升效率,这里,我们以散点图动态输出为利,将散点图更新为直方图,以实线目标。
首先是引入计算、绘图和动画三大模块:
import matplotlib.pyplot as plt # 引入画图模块 import numpy as np # 引入计算模块 import matplotlib.animation as animation # 引入动画模块
然后定义画图和设置自变量:
fig, ax = plt.subplots() # 定义要画图 x = np.linspace(0, 10, 100) # 定义自变量
之后定义一个动画函数,让所有的直方图按顺序输出:
def animate(i): # 自定义函数 ax.bar(x[i], np.sin(x[i]),0.1*abs(np.cos(x[i])))
这里面的0.1*abs(np.cos(x[i]))代表直方图的宽度,是对正弦函数去绝对值然后缩小10倍。
之后调用函数进行画图:
ani = animation.FuncAnimation(fig, animate,interval=20 ) # 调用animation.FuncAnimation()函数画图
最后保存动图和输出图形:
ax.set_title('ani-bar-aixmls') #设置图名 ani.save('ani-bar-aixmls.gif') #保存动图 plt.show() #输出图形
获得的动图为:
图1
至此的完整代码为:
import matplotlib.pyplot as plt # 引入画图模块
import numpy as np # 引入计算模块
import matplotlib.animation as animation # 引入动画模块
fig, ax = plt.subplots() # 定义要画图
x = np.linspace(0, 10, 100) # 定义自变量
def animate(i): # 自定义函数
ax.bar(x[i], np.sin(x[i]),0.1*abs(np.cos(x[i])))
ani = animation.FuncAnimation(fig, animate,interval=20
) # 调用animation.FuncAnimation()函数画图
ax.set_title('ani-bar-aixmls') #设置图名
ani.save('ani-bar-aixmls.gif') #保存动图
plt.show() #输出图形
尝试设计一下颜色,将其按照RGB的形式定义:
ax.bar(x[i], np.sin(x[i]),0.1*abs(np.cos(x[i])),color=(abs(np.sin(x[i])),(np.cos(x[i])**2),x[i]/10))
此时的动态图为:
图2
由图2可见,图形的颜色呈周期渐变趋势。
【3】总结
探索了二维动态柱状图绘制方法,成功编写代码,绘制出动态柱状图。