2016-01-30 4 views
11

Я пытаюсь создать анимированную гистограмму из моего кода ниже. Я могу создавать отдельные гистограммы для каждого раза, однако я не могу получить результаты для анимирования с помощью функции matplotlib.animation или от эмулирования кода в matplotlib tutorial.Анимированная гистограмма Matplotlib

import numpy as np 
import matplotlib.pyplot as plt 


betas = [] # some very long list 
entropy = [] # some very long list 

for time in [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0 , 3.5, 4.0, 4.5 5.0, 5.5, 6.0, 6.5 , 7.0, 7.5, 8.0 , 8,5 , 9.0, 9.5 , 10.0]: 

    plt.figure('entropy distribution at time %s ' % time)   
    indexbetas = {i for i, j in enumerate(betas) if j == time} 
    desiredentropies = [x for i, x in enumerate(entropy) if i in indexbetas] #the desiredentropies list depends on time 

    n, bins, patches = plt.hist(desiredentropies, 20, alpha=0.75 , label = 'desired entropies') 

plt.xlabel(r"$S_{(\time=%d)}$" % time, fontsize=20) 
plt.ylabel('Frequency of entropies') 


plt.legend() 
plt.grid(True) 
plt.show() 

Я изо всех сил, в частности, с кормлением мой desiredentropies список, который зависит от элемента в time списке для анимации.

+0

Пример из учебника для меня требуется несколько секунд - Python 2.7.11 и 3.4.3/Linux Mint 17. Вы получаете сообщение об ошибке в консоли/терминале/cmd.exe? – furas

+0

@furas Я добавил редактирование своего OP. Моя основная проблема заключается в подаче обновленного списка желаемых энтропий, из которого я хочу сделать гистограмму из-за изменения времени. Примечание. Список желаемых изменений изменяется для каждого элемента во времени. –

+0

Вам нужно будет использовать 'animation.FuncAnimation' – furas

ответ

5

Попробуйте это. В основном это позволяет использовать FuncAnimation для обновления гистограммы. Просмотрите animation documentation, чтобы узнать больше о различных параметрах этой функции, чтобы контролировать скорость обновления и тому подобное.

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

n = 100 
number_of_frames = 10 
data = np.random.rand(n, number_of_frames) 

def update_hist(num, data): 
    plt.cla() 
    plt.hist(data[num]) 

fig = plt.figure() 
hist = plt.hist(data[0]) 

animation = animation.FuncAnimation(fig, update_hist, number_of_frames, fargs=(data,)) 
plt.show() 

Что мы делаем здесь, вызвать функцию, update_hist который обрабатывает обновляет гистограммы и отображение новых данных на каждом шаге. Мы делаем это, очищая ось, а затем индексируя наши данные с предоставленным num, который является текущим номером кадра.

+0

Как обновить список новых желаемых участников, поскольку список зависит от времени, то есть элемента в списке времени? –

+0

Я изо всех сил стараюсь соответствовать этому коду. –

+0

Нормализуйте свои индексы целыми числами и поместите код в цикл 'for' в' update_hist' –

Смежные вопросы