我想弄清楚如何使用matplotlib.animation
为3个子图设置动画。我的代码看起来像这样:
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex='col', sharey='row')
ax1.set_aspect('equal', 'datalim')
ax1.set_adjustable('box-forced')
ax2.set_aspect('equal', 'datalim')
ax2.set_adjustable('box-forced')
ax3.set_aspect('equal', 'datalim')
ax3.set_adjustable('box-forced')
#fig = plt.figure()
def f(x, y):
return np.sin(x) + np.cos(y)
def g(x, y):
return np.sin(x) + 0.5*np.cos(y)
def h(x, y):
return 0.5*np.sin(x) + np.cos(y)
x = np.linspace(0, 2 * np.pi, 120)
y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)
im1 = plt.imshow(f(x, y), cmap=plt.get_cmap('viridis'), animated=True)
plt.colorbar(im1)
im2 = plt.imshow(g(x, y), cmap=plt.get_cmap('viridis'), animated=True)
plt.colorbar(im2)
im3 = plt.imshow(h(x, y), cmap=plt.get_cmap('viridis'), animated=True)
plt.colorbar(im3)
def updatefig(*args):
global x, y
x += np.pi / 15.
y += np.pi / 20.
im1.set_array(f(x, y))
im2.set_array(g(x, y))
im3.set_array(h(x, y))
return im1,im2,im3
ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True)
#plt.colorbar()
plt.show()
第一件事 - 为什么我看不到另外两个情节而不是im1? 第二件事 - 如何正确地将颜色条添加到每个子图?
答案 0 :(得分:2)
这种情况正在发生,因为您没有引用您创建的其他ax对象。因此,您将继续引用相同的设定轴。与彩条一样的故事。你非常接近,只需将所有东西都指向正确的物体,看看。
im1 = ax1.imshow(f(x, y), cmap=plt.get_cmap('viridis'), animated=True)
fig.colorbar(im1,ax=ax1)
im2 = ax2.imshow(g(x, y), cmap=plt.get_cmap('viridis'), animated=True)
fig.colorbar(im2,ax=ax2)
im3 = ax3.imshow(h(x, y), cmap=plt.get_cmap('viridis'), animated=True)
fig.colorbar(im3,ax=ax3)