Изменения анимации квадратичной сетки (matshow)

У меня есть сетка NxN с некоторыми значениями, которые меняются каждый раз. Я нашел способ построить одну конфигурацию сетки с matshow функции matshow , но я не знаю, как обновить статус с каждым шагом. Вот простой пример:

 from pylab import * from matplotlib import pyplot a = arange(25) a = a.reshape(5,5) b = 10*rand(5,5) matshow(ab, cmap = cm.jet) colorbar() show() 

Этот код создает следующую картинку: введите описание изображения здесь
Теперь представьте, что следующий шаг времени изменит некоторые значения, так что и эта картина. Это логика, которую я имел в виду:

 from pylab import * from matplotlib import pyplot a = arange(25) a = a.reshape(5,5) time=10 for t in range(time): b = 10*rand(5,5) print b matshow(ab, cmap=cm.jet) colorbar() show() 

Это создает 10 снимков. Я хотел бы оживить это, вместо этого создавая отдельные снимки, и, например, я хотел бы выбрать промежуток времени между изменениями (то есть частотой кадров).
Кроме того, я открыт для предложений по различным функциям, если matshow не подходит, но, пожалуйста, держите его простым, я относительно неопытен.

2 Solutions collect form web for “Изменения анимации квадратичной сетки (matshow)”

matplotlib 1.1 имеет модуль анимации (смотрите примеры ).

Используя animation.FuncAnimation вы можете обновить свой сюжет так:

 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def generate_data(): a = np.arange(25).reshape(5, 5) b = 10 * np.random.rand(5, 5) return a - b def update(data): mat.set_data(data) return mat def data_gen(): while True: yield generate_data() fig, ax = plt.subplots() mat = ax.matshow(generate_data()) plt.colorbar(mat) ani = animation.FuncAnimation(fig, update, data_gen, interval=500, save_count=50) plt.show() 

Вы можете сохранить анимацию, используя:

 ani.save('animation.mp4') 

Я сохраню его с помощью

 ani.save('animation.mp4', clear_temp=False) 

кадры сохраняются, и вы можете создать анимированный gif, как показано ниже.

 convert *.png animation.gif 

введите описание изображения здесь

Самый простой способ, вероятно, состоит в том, чтобы matplotlib сохранял отдельные изображения, а затем добавлял другую программу или библиотеку вместе с анимацией. В этом подходе используется модуль write2gif, но вы также можете использовать mencoder, ffmpeg или любое другое программное обеспечение, способное создавать видео:

 from images2gif import writeGif from pylab import * from matplotlib import pyplot as plt from PIL import Image a = arange(25) a = a.reshape(5,5) time=10 images = [] for t in range(time): fig = plt.figure(figsize = (5, 5)) ax = fig.add_subplot(111) b = 10*rand(5,5) cax = ax.matshow(ab, cmap=cm.jet, vmin = -8, vmax = 24) fname = 'tmp%03d.png' % t fig.colorbar(cax) fig.savefig(fname) images.append(Image.open(fname)) writeGif('matanim.gif', images, duration = .2) 

Вот пример того, как это сделать из интерфейса pylab. Это не работает так хорошо, так как непрерывный рендеринг работает в том же потоке, что и pylabs gui handlers:

 from pylab import arange, cm, draw, rand from matplotlib import pylab as plt from time import sleep plt.ion() a = arange(25) a = a.reshape(5,5) fig = plt.figure(figsize = (5, 5)) for i in range(200): ax = fig.add_subplot(111) b = 10*rand(5,5) cax = ax.matshow(ab, cmap=cm.jet, vmin = -8, vmax = 24) if i == 0: fig.colorbar(cax) draw() sleep(0.2) 
  • как использовать scipy.integrate, чтобы получить объем усеченной сферы?
  • Не удалось запустить pip: UnicodeDecodeError
  • Проблема с типом данных с использованием scipy.spatial
  • Целочисленное переполнение в массивах numpy
  • Numpy intersect1d с массивом с матрицей в качестве элементов
  • Повторная запись чисел записывает байтовые литералы в мой файл csv?
  • Итерация по произвольной размерности numpy.array
  • массив numpy с использованием длинного типа python
  • скользящее окно в numpy
  • Почему значения «Not a Number» равны True, если в Python / Numpy используется как boolean?
  • dgemm segfaulting с большими матрицами F-порядка в scipy
  • Python - лучший язык программирования в мире.