一、绘制初始图像
正常使用plt进行绘图,这里举例一个正弦函数:
二、绘制动态图的每一帧
思路:
- 根据横坐标点数绘制每一帧画面
- 每次在当前坐标处,绘制一个点和垂直的线,来表示当前点
- 可以在点上加个坐标等样式来增加动态效果
实例代码:
import numpy as np
import matplotlib.pyplot as plt
for i in range(len(x)):
plt.figure()
x = np.linspace(0, 12, 121)
y = np.sin(x)
# 绘制垂直横线
plt.vlines(x=x[i], ymin=-1, ymax=1, colors='black', linestyles='dashdot')
# 绘制水平横线
plt.hlines(y=0, xmin=0, xmax=12, colors='black', linestyles='solid',linewidths=3)
plt.plot(x, y)
plt.scatter(x[i],y[i],color='red',s=30)
plt.grid(True, linestyle='--', alpha=0.5)
plt.savefig(f"./test/{i}.png")
plt.show()
plt.close()
效果如下:
三、利用imageio库制作视频或者gif
最后,把所有图像绘制成一个动态图或者视频就可以实现了,效果还是客观的。
import imageio # 主要使用imageio这个库
import os
def create_gif(image_list, gif_name, duration=0.35):
frames = []
for image_name in image_list:
frames.append(imageio.imread(image_name))
# 转化成gif
imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
return
def create_video(image_list):
filename = 'output3.mp4'
filepath = os.path.join(os.getcwd(), filename)
frames = []
for image_name in image_list:
frames.append(imageio.imread(image_name))
# 将图片转换为视频
fps = 2 # 每秒钟帧数
with imageio.get_writer(filepath, fps=fps) as video:
for image in frames:
# frame = image.convert('RGB')
video.append_data(image)
def main():
orgin = './test' # 首先设置图像文件路径
files = os.listdir(orgin)
image_list = []
for i in range(len(files)):
file_dir = f"{i}.png"
path = os.path.join(orgin, file_dir)
image_list.append(path)
# 创建gif
gif_name = 'result.gif' # 设置动态图的名字
duration = 0.2
create_gif(image_list, gif_name, duration) # 创建动态图
# 创建video
# create_video(image_list=image_list)
if __name__ == '__main__':
main()
效果如图: