Изменения анимации квадратичной сетки (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`
  • Dataframe в массив numpy со значениями, разделенными запятыми
  • как я могу преобразовать дескрипторы, имеющие среднее значение по центру и масштабируемое до единичной дисперсии до моделирования машинного обучения с использованием python и pandas
  • Найти корень из численного интегрирования
  • Разница между np.int, np.int_, int и np.int_t в cython?
  • Как добавить сумму к нулю в GLM в Python?
  • numpy IndexError: слишком много индексов для массива при индексировании матрицы с другим
  • Косинус сходство
  • Python - лучший язык программирования в мире.