Обновление гистограммы matplotlib? - PullRequest
5 голосов
/ 29 февраля 2012

У меня есть гистограмма, которая получает значения y из dict.Вместо того, чтобы показывать несколько графиков со всеми различными значениями, и мне приходится закрывать все, мне нужно обновить значения на одном графике.Есть ли решение для этого?

Ответы [ 2 ]

10 голосов
/ 29 февраля 2012

Вот пример того, как вы можете анимировать гистограмму. Вы вызываете plt.bar только один раз, сохраняете возвращаемое значение rects, а затем вызываете rect.set_height, чтобы изменить гистограмму. Вызов fig.canvas.draw() обновляет цифру.

import matplotlib
matplotlib.use('TKAgg')
import matplotlib.pyplot as plt
import numpy as np

def animated_barplot():
    # http://www.scipy.org/Cookbook/Matplotlib/Animations
    mu, sigma = 100, 15
    N = 4
    x = mu + sigma*np.random.randn(N)
    rects = plt.bar(range(N), x,  align = 'center')
    for i in range(50):
        x = mu + sigma*np.random.randn(N)
        for rect, h in zip(rects, x):
            rect.set_height(h)
        fig.canvas.draw()

fig = plt.figure()
win = fig.canvas.manager.window
win.after(100, animated_barplot)
plt.show()
2 голосов
/ 19 января 2017

Я упростил вышеупомянутое превосходное решение до его основ, с более подробной информацией на моем blogpost :

import numpy as np
import matplotlib.pyplot as plt

numBins = 100
numEvents = 100000

file = 'datafile_100bins_100000events.histogram'
histogramSeries = np.fromfile(file, int).reshape(-1,numBins)

fig, ax = plt.subplots()
rects = ax.bar(range(numBins), np.ones(numBins)*40)  # 40 is upper bound of y-axis 

for i in range(numEvents):
    [rect.set_height(h) for rect,h in zip(rects,histogramSeries[i,:])]
    fig.canvas.draw()
    plt.pause(0.001)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...