matplotlib.widgets.Slider с гистограммой - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь создать интерактивную гистограмму, но во время обновления

старая гистограмма не очищается, как показано на изображении ниже.

enter image description here )

график выше генерируется с использованием следующего кода

from functools import lru_cache
import scipy.stats as ss
import matplotlib.pyplot as plt
import matplotlib.widgets as widgets

fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)

weight = ss.lognorm(0.23, 0, 70.8)

@lru_cache
def sampling(n):
    return [ weight.rvs().mean() for i in range(1000) ]

theme = {
    'color' : "#1f77b4",
    'alpha' : 0.7,
}

t = ax.hist(sampling(100), **theme)

slider = widgets.Slider(
    ax      = plt.axes([0.25, 0.1, 0.5, 0.03]),
    label   = "n",
    valmin  = 10,
    valmax  = 1000,
    valinit = 100,
    valstep = 1

def update(val):
    global t
    del t
    t = ax.hist(sampling(int(val)), **theme)
    fig.canvas.draw_idle()

slider.on_changed(update)
ax.set_title('Distribution of Sample Size Mean')
plt.show()

1 Ответ

1 голос
/ 28 мая 2020

ax.hist возвращает кортеж, содержащий количество ячеек, края ячеек, а затем патчи ... Таким образом, вам нужно захватить исправления и удалить их при обновлении.

Вам необходимо используйте t.remove() в update, например:

*_, patches = ax.hist()

def update(val):
    global patches
    for p in patches:
        p.remove()

    *_, patches = ax.hist(sampling(int(val)), **theme)
    fig.canvas.draw_idle()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...