欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python 制作动态图

程序员文章站 2024-01-19 12:58:10
...

1. pyplot 动态效果

如果想得到动态绘制效果,可以使用 plt.pause(k) 每绘制一次就暂停 kms 实现动态效果:

plt.figure()
for i in range(N):
	# 放绘图代码 draw
	plt.pause(0.2)	# delay
plt.show()

比如下面的感知机:

Python 制作动态图

2. 将绘图结果导出为 GIF

有时候我们并不满足于此,我们可能想得到 gif 动态图,一种办法是:

  1. 先把每一次绘制结果保存
  2. 再把所有结果连起来得到 gif

2.1 保存每一步的结果

首先创建一个目录 output_dir 用来存放结果图:

output_dir = './images'	# 输出文件夹的相对路径

for i in range(N):
	plt.savefig(output_dir + '//iter' + str(i) + '.jpg')
	plt.pause(0.1)
plt.show()

程序跑完就可以得到一堆图:
Python 制作动态图


2.2 生成 GIF

可以将下面的 py 文件打包为函数 gif_generator,在绘图主程序中 import 后,直接调用 gif_generator 就可以生成 gif 了

import os
import imageio

path='./imgs'

filenames=[]
for files in os.listdir(path):
    if files.endswith('jpg') or files.endswith('jpeg') or files.endswith('png'):
    	file=os.path.join(path,files)
    	filenames.append(file)

images=[]
for filename in filenames:
    images.append(imageio.imread(filename))
imageio.mimsave('./OR_perceptron.gif', images, duration=0.8)


3. 美化

坐标轴设置

# 把坐标轴原点移到 (0, 0)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
plt.xlabel('x'), plt.ylabel('y')
plt.xticks([]), plt.yticks([])	# 去掉刻度

散点图颜色动态设置

创建一个元素值落在 [0, 1] 之间的 list colors

调用 scatter 函数时,设置参数 facecolors=colors

如下面在绘制 RGB 空间散点图时,设置每一个点的颜色就是真实的 RGB 颜色:

pixel_colors = (rgb_nemo.reshape(rows*cols, 3)/255).tolist()
axis.scatter(r.flatten(), g.flatten(), b.flatten(), 
		facecolors=pixel_colors, marker='.')
Python 制作动态图