python matplotlib: обновление ряда random.normal в гистограмме с использованием виджетов TextBox - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь создать интерактивную гистограмму, которая отображает случайный ряд.Взаимодействие должно позволять виджету TextBox передавать новые значения для функции random.normal и перерисовывать гистограмму.Пока у меня есть начальная гистограмма, показывающая с полями ввода, но я даже не могу сделать поля, чтобы принять ввод.Я попытался воссоздать гистограмму каждый раз, когда значение вводится в виджет TextBox:

normal = np.random.normal

fig, ax = plt.subplots()
ax.set_xlim(-6,9.5)
ax.set_ylim(0, 0.25)
plt.subplots_adjust(bottom=0.2)

nloc = 1.0
nscale = 2.0

a = plt.hist(normal(nloc, nscale, 1000), bins=30, alpha=0.5, density = True)

def submitloc(text):
    value = float(text)
    nseries = normal(value, nscale, 1000)
    plt.sca(ax)
    plt.cla()
    a = plt.hist(nseries, bins=30, alpha=0.5, density = True)
    plt.draw()

def submitscale(text):
    value = float(text)
    nseries = normal(nloc, value, 1000)
    plt.sca(ax)
    plt.cla()
    a = plt.hist(nseries, bins=30, alpha=0.5, density = True)
    plt.draw()

axbox = plt.axes([0.1, 0.05, 0.1, 0.05])
text_box = TextBox(axbox, 'loc ', initial=nloc)
text_box.on_submit(submitloc)

axbox2 = plt.axes([0.3, 0.05, 0.1, 0.05])
text_box2 = TextBox(axbox2, 'scale ', initial=nscale)
text_box2.on_submit(submitscale)

plt.show()

Я также пытался изменить глобальные переменные nloc и nscale из ввода текстового поля:

normal = np.random.normal

fig, ax = plt.subplots()
ax.set_xlim(-6,9.5)
ax.set_ylim(0, 0.25)
plt.subplots_adjust(bottom=0.2)

nloc = 1.0
nscale = 2.0

def drawplot(nloc, nscale):
    plt.hist(normal(nloc, nscale, 1000), bins=30, alpha=0.5, density = True);
    plt.show()

def submitloc(text):
    plt.sca(ax)
    plt.cla()
    global nloc
    nloc = float(text)
    drawplot(nloc, nscale)

def submitscale(text):
    plt.sca(ax)
    plt.cla()
    global nscale
    nscale = float(text)
    drawplot(nloc, nscale)

drawplot(nloc, nscale)

axbox = plt.axes([0.1, 0.05, 0.1, 0.05])
text_box = TextBox(axbox, 'loc ', initial=nloc)
text_box.on_submit(submitloc)

axbox2 = plt.axes([0.3, 0.05, 0.1, 0.05])
text_box2 = TextBox(axbox2, 'scale ', initial=nscale)
text_box2.on_submit(submitscale)

1 Ответ

0 голосов
/ 26 января 2019

A TextBox показывает текст.Это означает, что значение initial должно быть строкой.

TextBox(axbox, 'loc ', initial=str(nloc))
...