Как сделать анимацию с контурной ()?

Я пытаюсь оживить вигнер-функцию пространственных координат некоторых зависящих от времени данных. Функция вигнера 2-мерная, поэтому я использую contourf () для ее построения. У меня есть данные, хранящиеся в файле HDF5, и вы можете делать дистрибутивы Вигнера «на лету», но я не могу понять, как его оживить. Все обучающие программы и примеры анимации, которые я смог найти (например, этот и этот ), строго относятся к строкам. В частности, их функция line.set_data() animate(i) использует line.set_data() , и я не могу найти эквивалент для contourf() .

Как я могу contourf() изображения, сделанные с помощью contourf() ?

Каков эквивалент set_data() для set_data() ?

4 Solutions collect form web for “Как сделать анимацию с контурной ()?”

Существует простой способ сделать это с помощью FuncAnimation : у вас должна быть функция, которая очищает ось и формирует новый контур на основе номера кадра. Не забудьте установить blit как False .

 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation DATA = np.random.randn(800).reshape(10,10,8) fig,ax = plt.subplots() def animate(i): ax.clear() ax.contourf(DATA[:,:,i]) ax.set_title('%03d'%(i)) return ax interval = 2#in seconds ani = animation.FuncAnimation(fig,animate,5,interval=interval*1e+3,blit=False) plt.show() 

Вот что я использовал для анимации 2d контурных графиков, он был адаптирован из http://matplotlib.org/examples/animation/dynamic_image2.html

 import pylab as pl import numpy as np import matplotlib.animation as animation import types fig = pl.figure() # Some 2D arrays to plot (time,x,y) data = np.random.random_sample((20,10,10)) # ims is a list of lists, each row is a list of artists to draw in the # current frame; here we are just animating one artist, the image, in # each frame ims = [] for i in range(len(data[:,0,0])): t_step = int(i) im = pl.contourf(data[i,:,:]) ################################################################# ## Bug fix for Quad Contour set not having attribute 'set_visible' def setvisible(self,vis): for c in self.collections: c.set_visible(vis) im.set_visible = types.MethodType(setvisible,im) im.axes = pl.gca() im.figure=fig #################################################################### ims.append([im]) ani = animation.ArtistAnimation(fig, ims, interval=70, blit=False,repeat_delay=1000) pl.show() 

Я рисую географические данные и поэтому нуждаюсь в Basemap. Основываясь на ответе captain_M и сообщении об обсуждении / ошибке на https://github.com/matplotlib/matplotlib/issues/6139, я публикую ответ, вдохновленный tacaswell, который позволяет использовать контур в анимации двухмерных данных и сохранять это как mp4, если у вас есть ffmpeg:

 from matplotlib import animation from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.basemap import Basemap fig, ax = plt.subplots() # set up map projection m = Basemap(projection='nsper',lon_0=-0,lat_0=90) m.drawcoastlines() m.drawparallels(np.arange(0.,180.,30.)) m.drawmeridians(np.arange(0.,360.,60.)) # some 2D geo arrays to plot (time,lat,lon) data = np.random.random_sample((20,90,360)) lat = np.arange(len(data[0,:,0])) lon = np.arange(len(data[0,0,:])) lons,lats = np.meshgrid(lon,lat) # ims is a list of lists, each row is a list of artists to draw in the # current frame; here we are animating three artists, the contour and 2 # annotatons (title), in each frame ims = [] for i in range(len(data[:,0,0])): im = m.contourf(lons,lats,data[i,:,:],latlon=True) add_arts = im.collections text = 'title={0!r}'.format(i) te = ax.text(90, 90, text) an = ax.annotate(text, xy=(0.45, 1.05), xycoords='axes fraction') ims.append(add_arts + [te,an]) ani = animation.ArtistAnimation(fig, ims) ## If you have ffmpeg you can save the animation by uncommenting ## the following 2 lines # FFwriter = animation.FFMpegWriter() # ani.save('basic_animation.mp4', writer = FFwriter) plt.show() . from matplotlib import animation from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.basemap import Basemap fig, ax = plt.subplots() # set up map projection m = Basemap(projection='nsper',lon_0=-0,lat_0=90) m.drawcoastlines() m.drawparallels(np.arange(0.,180.,30.)) m.drawmeridians(np.arange(0.,360.,60.)) # some 2D geo arrays to plot (time,lat,lon) data = np.random.random_sample((20,90,360)) lat = np.arange(len(data[0,:,0])) lon = np.arange(len(data[0,0,:])) lons,lats = np.meshgrid(lon,lat) # ims is a list of lists, each row is a list of artists to draw in the # current frame; here we are animating three artists, the contour and 2 # annotatons (title), in each frame ims = [] for i in range(len(data[:,0,0])): im = m.contourf(lons,lats,data[i,:,:],latlon=True) add_arts = im.collections text = 'title={0!r}'.format(i) te = ax.text(90, 90, text) an = ax.annotate(text, xy=(0.45, 1.05), xycoords='axes fraction') ims.append(add_arts + [te,an]) ani = animation.ArtistAnimation(fig, ims) ## If you have ffmpeg you can save the animation by uncommenting ## the following 2 lines # FFwriter = animation.FFMpegWriter() # ani.save('basic_animation.mp4', writer = FFwriter) plt.show() . from matplotlib import animation from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.basemap import Basemap fig, ax = plt.subplots() # set up map projection m = Basemap(projection='nsper',lon_0=-0,lat_0=90) m.drawcoastlines() m.drawparallels(np.arange(0.,180.,30.)) m.drawmeridians(np.arange(0.,360.,60.)) # some 2D geo arrays to plot (time,lat,lon) data = np.random.random_sample((20,90,360)) lat = np.arange(len(data[0,:,0])) lon = np.arange(len(data[0,0,:])) lons,lats = np.meshgrid(lon,lat) # ims is a list of lists, each row is a list of artists to draw in the # current frame; here we are animating three artists, the contour and 2 # annotatons (title), in each frame ims = [] for i in range(len(data[:,0,0])): im = m.contourf(lons,lats,data[i,:,:],latlon=True) add_arts = im.collections text = 'title={0!r}'.format(i) te = ax.text(90, 90, text) an = ax.annotate(text, xy=(0.45, 1.05), xycoords='axes fraction') ims.append(add_arts + [te,an]) ani = animation.ArtistAnimation(fig, ims) ## If you have ffmpeg you can save the animation by uncommenting ## the following 2 lines # FFwriter = animation.FFMpegWriter() # ani.save('basic_animation.mp4', writer = FFwriter) plt.show() 

Если вы похожи на меня, а matplotlib.animation не работает. Вот еще кое-что, что вы можете попробовать. Если вы хотите постоянно обновлять цветную панель и все остальное на рисунке, используйте plt.ion () в самом начале, чтобы включить интерактивное построение графика и использовать комбо plt.draw () и plt.clf () для непрерывного обновления графика , Вот пример кода:

 import matplotlib.pyplot as plt import numpy as np plt.ion(); plt.figure(1); for k in range(10): plt.clf(); plt.subplot(121); plt.contourf(np.random.randn(10,10)); plt.colorbar(); plt.subplot(122,polar=True) plt.contourf(np.random.randn(10,10)); plt.colorbar(); plt.draw(); 

Обратите внимание, что это работает с цифрами, содержащими различные подзаголовки и различные типы графиков (то есть полярных или декартовых)

  • предотвратить научную нотацию в matplotlib.pyplot
  • Как рисовать таблицу динамического программирования в python
  • Seaborn, показывающий научную нотацию в тепловой карте для трехзначных чисел
  • Запись переменных в виде индексов в математическом режиме
  • matplotlib stacked bar chart AssertionError: несовместимые размеры: аргумент «bottom» должен быть длиной 3 или скалярным
  • Как построить несколько гистограмм на одном и том же участке с морским коньком
  • Plt.show показывает полный график, но savefig обрезает изображение (python)
  • Добавить легенды в сюжет LineCollection
  •  
    Interesting Posts for Van-Lav

    Как получить корреляцию двух векторов в python

    программное обеспечение / инструмент для автоматизации приложений

    Отображение терминала ввода не синхронизируется во время / после использования python? (временное исправление = `reset`)

    Python: функция, которая возвращает dict, чьими ключами являются имена входных аргументов

    Как я могу получить список всех стандартных библиотек Python

    Проверьте, существует ли ключ в типе Python в шаблонах Jinja2

    Как сделать приложение тестирования PowerBuilder UI?

    Неблокирующие запросы в Sanic framework

    Проверьте, какой номер заканчивается в Python

    Создание простой страницы загрузки файла HTML

    Итерации по всем парам последовательных элементов из данного списка

    Нормализовать столбцы кадра данных pandas

    Как в алфавитном порядке сортировать массив словарей на одном ключе?

    Сканирование сканирования из скрипта всегда блокирует выполнение скрипта после очистки

    Ошибка области переменной Python

    Python - лучший язык программирования в мире.