Matplotlib动画:错误的色条比例和热图值

时间:2019-06-26 02:22:39

标签: matplotlib animation data-visualization heatmap

我正在尝试为我的热图制作动画,以可视化值随时间的变化。 在下面的示例中,我将突变两个矩阵的值,而一个矩阵的所有元素均等于零开始,另一个矩阵的所有元素均等于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。但是您可以看到结果动画如下所示,表现不正常。 enter image description here

这是怎么了?如何解决?

0 个答案:

没有答案