我正在运行一个漫长的仿真过程,我需要在热图中获得反馈。 考虑以下示例(取自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循环中绘制每个附加数组,即在每次迭代时更新热图?
答案 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()