2016-01-30 10 views
11

Próbuję utworzyć animowany histogram z mojego kodu poniżej. Mogę tworzyć indywidualne histogramy za każdym razem jednak nie mogę uzyskać animacji wyników za pomocą funkcji matplotlib.animation lub emulacji kodu w matplotlib tutorial.Animowany histogram 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() 

walczę w szczególności z karmienia moją listę desiredentropies która zależy od elementu na liście time dla animacji.

+0

przykład z samouczka potrzebuję kilka sekund pracy dla mnie - Python 2.7.11 i 3.4.3/Linux Mennica 17. Czy otrzymujesz komunikat o błędzie w konsoli/terminal/cmd.exe? – furas

+0

@furas Dodałem zmianę do mojego OP. Moim głównym problemem jest aktualizacja zaktualizowanych list centralnych, z których chcę zrobić histogram, wraz z upływem czasu. Uwaga: lista żądanych punktów centralnych zmienia się dla każdego elementu w czasie. –

+0

Będziesz musiał użyć 'animation.FuncAnimation' – furas

Odpowiedz

5

Spróbuj tego. W zasadzie po prostu wykorzystuje FuncAnimation, aby umożliwić aktualizację histogramu. Sprawdź numer animation documentation, aby dowiedzieć się więcej o różnych parametrach tej funkcji, aby kontrolować szybkość aktualizacji i tym podobne.

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() 

Co robimy tutaj jest wywołanie funkcji, która obsługuje aktualizowanie update_hist histogram i wyświetlanie nowych danych na każdym kroku. Robimy to, czyszcząc oś, a następnie indeksując nasze dane za pomocą dostarczonego num, który jest bieżącym numerem ramki.

+0

Jak zaktualizować moją nową listę żądanych punktów, ponieważ lista zależy od czasu, tj. Od elementu na liście czasu? –

+0

Staram się dopasować to do mojego kodu. –

+0

Znormalizuj swoje indeksy do liczb całkowitych i umieść kod w pętli 'for' na' update_hist' –