我正在尝试为我的热图制作动画,以可视化值随时间的变化。 在下面的示例中,我将突变两个矩阵的值,而一个矩阵的所有元素均等于零开始,另一个矩阵的所有元素均等于1。
M1 = np.zeros((4,4))
M2 = np.ones((4,4))
这是我完整的动画代码
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.axes_grid1 import make_axes_locatable
from tqdm import tqdm
M1 = np.zeros((4,4))
M2 = np.ones((4,4))
fig, ax = plt.subplots(1,2, figsize=(12,8))
ims = []
for e in tqdm(range(10)):
M1[:,1] += e
M1[2,:] -= e
M1[2,1] += 10/(e+1)
M2[:,1] += np.random.randn(4)
im1 = ax[0].imshow(M1, cmap='jet')
im2 = ax[1].imshow(M2, cmap='jet')
ims.append([im1,im2])
ax[0].axis('off')
ax[1].axis('off')
divider1 = make_axes_locatable(ax[0])
divider2 = make_axes_locatable(ax[1])
cax1 = divider1.append_axes('right', size='5%', pad=0.05)
cax2 = divider2.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im1, ax=ax[0], cax=cax1)
fig.colorbar(im2, ax=ax[1], cax=cax2)
pad = 15
# Annotating columns
ax[0].annotate('Weight', xy=(0.5,1), xytext=(0,pad),
xycoords='axes fraction', textcoords='offset points',
size='large', ha='center', va='baseline', fontsize=18)
ax[1].annotate('Gradient', xy=(0.5,1), xytext=(0,pad),
xycoords='axes fraction', textcoords='offset points',
size='large', ha='center', va='baseline', fontsize=18)
# Annotating rows
row = 'Row 1'
ax[0].annotate(row, xy=(0,0.5), xytext=(-ax[0].yaxis.labelpad - pad,0),
xycoords=ax[0].yaxis.label, textcoords='offset points',
size='large', ha='right', va='center', fontsize=18)
ani = animation.ArtistAnimation(fig, ims, interval=500, blit=True,
repeat_delay=1000)
由于我仅对L.H.S上的热图进行矩阵的第二列和第三行的变异,而对R.H.S上的矩阵仅进行第二列的变异,因此其他背景值应分别保持为0和1。但是您可以看到结果动画如下所示,表现不正常。
这是怎么了?如何解决?