逐行更新热图

时间:2018-06-21 17:10:56

标签: python heatmap

我正在运行一个漫长的仿真过程,我需要在热图中获得反馈。 考虑以下示例(取自matplotlib pcolormesh页,进行了一些更改以查看我的观点):

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
import numpy as np


dx, dy = 0.05, 0.05

y, x = np.mgrid[slice(1, 5 + dy, dy),
                slice(1, 5 + dx, dx)]

z = np.array([[ 0.18037951,  0.26823017,  0.36335424,  0.46423736,  0.56825964,
         0.67173158,  0.77007089,  0.85811519,  0.93054438,  0.98236784,
         1.00941799,  1.00878729,  0.97915042,  0.92092769,  0.83626679,
         0.72884501,  0.60351893,  0.46586833,  0.3216944 ,  0.17653486,
         0.03525287, -0.09825821, -0.22123139, -0.33204273, -0.43010585,
        -0.51567655, -0.58960758, -0.65309367, -0.70744154, -0.75388905,
        -0.79348532, -0.8270324 , -0.855079  , -0.87795199, -0.89580892,
        -0.90869691, -0.91660678, -0.91951606, -0.91741895, -0.91034447,
        -0.8983655 , -0.88160216, -0.86022201, -0.83443866, -0.80450974,
        -0.77073429, -0.73344977, -0.6930286 , -0.64987387, -0.60441326,
        -0.55708922, -0.50834268, -0.4585869 , -0.40816925, -0.35732049,
        -0.30609505, -0.25431019, -0.20149661, -0.14687623, -0.08938337,
        -0.02774267,  0.03939001,  0.11322776,  0.19460981,  0.28374411,
         0.37997206,  0.48159657,  0.58581163,  0.68876138,  0.78574072,
         0.87152875,  0.94082577,  0.9887458 ,  1.011305  ,  1.00584324,
         0.97132207,  0.90845861,  0.81967616,  0.70887839,  0.58107739,
         0.44192559]])

for i in range(80):
    z = np.concatenate((z,np.array([np.sin(x[i])**10 + np.cos(10 + y[i]*x[i]) * np.cos(x[i])])))

levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
cmap = plt.get_cmap('PiYG')
norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
plt.pcolormesh(x, y, z, cmap=cmap, norm=norm)

除了糟糕的编码之外,还有什么方法可以从for循环中绘制每个附加数组,即在每次迭代时更新热图?

1 个答案:

答案 0 :(得分:1)

在“ for”循环内绘制:

    cmap = plt.get_cmap('PiYG')
    for i in range(80):
        z = np.concatenate((z,np.array([np.sin(x[i])**10 + np.cos(10 + y[i]*x[i]) * np.cos(x[i])])))
        levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
        norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
        plt.pcolormesh(x, y, z, cmap=cmap, norm=norm)
        plt.show()