ww

1. pyplot 动态效果

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

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

比如下面的感知机:



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()

程序跑完就可以得到一堆图:


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='.')
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐