Ответ 1
Изменить: В настоящее время проще и удобнее использовать matplotlib.animation
:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def animate(frameno):
x = mu + sigma * np.random.randn(10000)
n, _ = np.histogram(x, bins, normed=True)
for rect, h in zip(patches, n):
rect.set_height(h)
return patches
mu, sigma = 100, 15
fig, ax = plt.subplots()
x = mu + sigma * np.random.randn(10000)
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75)
ani = animation.FuncAnimation(fig, animate, blit=True, interval=10,
repeat=True)
plt.show()
Вот пример создания анимированного графика здесь. Основываясь на этом примере, вы можете попробовать что-то вроде:
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
mu, sigma = 100, 15
fig = plt.figure()
x = mu + sigma*np.random.randn(10000)
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75)
for i in range(50):
x = mu + sigma*np.random.randn(10000)
n, bins = np.histogram(x, bins, normed=True)
for rect,h in zip(patches,n):
rect.set_height(h)
fig.canvas.draw()
Я могу получить около 14 кадров в секунду таким образом, по сравнению с 4 кадрами в секунду, используя первый код <. Хитрость заключается в том, чтобы избежать запроса matplotlib для рисования полных фигур. Вместо этого вызовите plt.hist
один раз, затем выполните управление существующим matplotlib.patches.Rectangle
в patches
, чтобы обновить гистограмму, и вызовите
fig.canvas.draw()
, чтобы сделать обновления видимыми.