Python 制作动态图
程序员文章站
2024-01-19 12:58:10
...
1. pyplot 动态效果
如果想得到动态绘制效果,可以使用 plt.pause(k)
每绘制一次就暂停 k
ms 实现动态效果:
plt.figure()
for i in range(N):
# 放绘图代码 draw
plt.pause(0.2) # delay
plt.show()
比如下面的感知机:
2. 将绘图结果导出为 GIF
有时候我们并不满足于此,我们可能想得到 gif 动态图,一种办法是:
- 先把每一次绘制结果保存
- 再把所有结果连起来得到 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='.')
上一篇: 模拟动态图的雨滴掉落