С Python3, Numpy, Matplotlib, Anaconda, Spyder: у меня есть массив, который со временем меняется, и я хочу анимировать его тепловую карту. Сейчас я уже нашел множество способов сделать это, но ни один из них, похоже, не работает.
Я попробовал каждый из трех способов этого парня:
https://gist.github.com/take-iwiw/43b1d8bc1dcfd2f0bf19a81486985d59
Ни один из них не работал как предполагалось. В Spyder ни один не работал вообще, поэтому я попытался запустить его через Visual Code Studio, где только третий был на самом деле анимирован, но он находился в большей (пустой) сетке и не выглядел в целом правильным.
Поэтому я искал больше и наткнулся на этот пост:
Отображение в реальном времени изменяющейся тепловой карты Python
Это был новый подход и очень точно то, что я хотел. Я попробовал это сделать, но в Spyder он просто показывает первое изображение, а в коде Visual Studio он показывает первые два, как и должно, а затем окно анимации вылетает.
Вот код из DrV из этой последней ссылки, хотя у меня есть ощущение, что это не может быть проблемой:
import matplotlib.pyplot as plt
import numpy as np
import time
# create the figure
fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.imshow(np.random.random((10,10)))
plt.show(block=False)
# draw some data in loop
for i in range(10):
# wait for a second
time.sleep(1)
# replace the image contents
im.set_array(np.random.random((10,10)))
# redraw the figure
fig.canvas.draw()
Я хотел бы иметь несколько плавную анимацию этого случайного массива. Команда time.sleep предназначена только для имитации времени вычислений, в котором нуждается моя программа, и мой массив не будет полностью случайным, а также заполнен только +1 или -1. Мне не нужны оси или какая-либо дополнительная информация, хотя было бы неплохо, если бы я мог напечатать значение рядом с ним (которое анимируется вместе с ним).
Мне кажется, проблема в том, как я выполняю программу. Я очень новичок в программировании, но раньше я делал похожие анимации на Scilab и Fortran, что было сравнительно легко, поэтому я спрашиваю себя, что я делаю неправильно.