一、绘制初始图像
正常使用plt进行绘图,这里举例一个正弦函数:
二、绘制动态图的每一帧
思路:
- 根据横坐标点数绘制每一帧画面
- 每次在当前坐标处,绘制一个点和垂直的线,来表示当前点
- 可以在点上加个坐标等样式来增加动态效果
实例代码:
import numpy as np
import matplotlib.pyplot as pltfor 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 osdef create_gif(image_list, gif_name, duration=0.35):frames = []for image_name in image_list:frames.append(imageio.imread(image_name))# 转化成gifimageio.mimsave(gif_name, frames, 'GIF', duration=duration)returndef 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)# 创建gifgif_name = 'result.gif' # 设置动态图的名字duration = 0.2create_gif(image_list, gif_name, duration) # 创建动态图# 创建video# create_video(image_list=image_list)if __name__ == '__main__':main()
效果如图: