Как получить значение гистограммы после использования ползунка из matplotlib.widgets? - PullRequest
1 голос
/ 12 марта 2019

У меня есть гистограмма с плохими (то есть отрицательными) и хорошими значениями (то есть положительными).Эти значения определяются порогом.Пожалуйста, обратитесь к Postive_Negative_Circles

Вывод гистограммы Bar_Chart

, который отображает: Bad = 3472, Good = 664 и порог = 164,094

Если я изменю порог, эти значения должны измениться.Вот что я сделал до сих пор:

import matplotlib.pyplot as plt
import pylab as p
from matplotlib.widgets import Slider, Button

axcolor = 'lightgoldenrodyellow'
axthreshold = plt.axes([0.2, 0.001, 0.65, 0.03], facecolor=axcolor)
sthreshold = Slider(axthreshold, 'Threshold', 0.0, 300, 
                    valinit=threshold, valstep=None)

fig_text1 = p.figtext(0.5, 0.65,  str(sthreshold.val))
def update(val):
    thresh = int(sthreshold.val)
    data = [np.sum(values <= thresh), np.sum(values > thresh)]
    ax.clear ()
    ax.bar(labels, data, color=colors)
    np.set_printoptions(precision=2)
    fig_text1.set_text(str(sthreshold.val))

    fig.canvas.draw_idle()

sthreshold.on_changed(update)
resetax = plt.axes([0.7, 0.001, 0.1, 0.04])
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')

def reset(event):
    sthreshold.reset()

button.on_clicked(reset)

Приведенный выше код работает нормально, и гистограмма также меняется, но, к сожалению, я не могу отобразить значение гистограммы после обновления Slider.Я могу отображать только значение для порога.

Теперь я установил порог на 114,24, используя виджет Slider из matplotlib, и гистограмма должна отображать значения : Good = 2543 иПлохо = 1593. Как видите, отображается изменение порогового значения, но не значения гистограммы

Bar_Chart_after_Changed_Threshold

Пожалуйста, игнорируйте кнопку сбросана верхней части слайдера.Я пытался изменить положение кнопки сброса, но она не работает.Я думаю, что есть проблема с ноутбуком% matplotlib.

Может кто-нибудь помочь мне здесь?Я искал онлайн решение (например, демонстрацию matplotlib, StackOverflow и т. Д.), Но не смог найти то, что искал.Существует несколько вопросов StackOverflow по обновлению Slider для гистограммы, но ни один не говорит о значении гистограммы.Кроме того, дайте мне знать, если вам нужна дополнительная информация о коде.

Если вы знаете какой-либо хороший источник или решение, пожалуйста, дайте мне знать.Спасибо

ОБНОВЛЕНИЕ:

Это то, что я пытался, и это не работает:

def update(val):
    thresh = int(sthreshold.val)
    print(thresh)
    data = [np.sum(values <= thresh), np.sum(values > thresh)]
    ax.clear ()
    bars = ax.bar(labels, data, color=colors)

    for rect in bars:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width()/2.0, height, '%d' % 
                   int(height), ha='center', va='bottom')

   np.set_printoptions(precision=2)
   fig_text1.set_text(str(sthreshold.val))

   fig.canvas.draw_idle()

1 Ответ

1 голос
/ 12 марта 2019
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

fig,ax = plt.subplots()

labels = ['good','bad']
colors = ['C0','C1']
values = np.random.normal(0,1,size=(1000,))
threshold = 0.

axcolor = 'lightgoldenrodyellow'
axthreshold = plt.axes([0.2, 0.001, 0.65, 0.03], facecolor=axcolor)
sthreshold = Slider(axthreshold, 'Threshold', -1., 1., 
                    valinit=threshold, valstep=None)


def update(val):
    data = [np.sum(values <= val), np.sum(values > val)]
    ax.clear()
    ax.bar(labels, data, color=colors)
    thr_txt = ax.text(0.5, 0,  '{:.2f}'.format(val))
    good_label = ax.text(0,data[0], 'good={:d}'.format(data[0]), ha='center')
    bad_label = ax.text(1,data[1], 'bad={:d}'.format(data[1]),ha='center')
    fig.canvas.draw_idle()
sthreshold.on_changed(update)
update(threshold)

enter image description here

...