Анимированная гистограмма Matplotlib
Я пытаюсь создать анимированную гистограмму из моего кода ниже. Я могу создавать отдельные гистограммы для каждого раза, однако я не могу получить результаты для анимирования с помощью функции matplotlib.animation
или из эмуляции кода в matplotlib tutorial.
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
для анимации.
Ответы
Ответ 1
Попробуйте это. В основном это позволяет использовать FuncAnimation для обновления гистограммы. Ознакомьтесь с документацией по анимации, чтобы узнать больше о различных параметрах этой функции, чтобы контролировать скорость обновления и т.д.
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
, который является текущим номером кадра.