Обновить ось vbar в соответствии с виджетом - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь создать простое приложение с боке, где гистограмма обновляется при выборе новой переменной в раскрывающемся меню. Гистограмма действительно обновляется, но не ось X (категории). Я читал похожие вопросы на разных форумах, но ни один из ответов не решил мои проблемы. Вот мой код:

def modify_doc(doc):

    def make_dataset(var_name):

        CountDf=pd.DataFrame(TrainData[var_name].value_counts()).reset_index()
        CountDf.columns=['CATEGORY','COUNT']

        #return(CountDf)
        return(ColumnDataSource(CountDf))

    def make_plot(src):

        #p=figure(x_range=list(src.data['CATEGORY']))
        p=figure(x_range=FactorRange(factors=list(src.data['CATEGORY'])))
        p.x_range.factors = src.data['CATEGORY']
        p.vbar(x='CATEGORY', top='COUNT', width=0.9, source=src)
        p.xaxis.major_label_orientation = math.pi/2

        return(p)

    # Update function takes three default parameters
    def update(attr, old, new):
        new_src = make_dataset(new)
        src.data.update(new_src.data)
        p.x_range.factors = src.data['CATEGORY']

    var_selection = Dropdown(label='Variable to plot:',menu=CatVarLst, value=CatVarLst[0])
    var_selection.on_change('value',update)

    controls = WidgetBox(var_selection)

    initial_var=CatVarLst[0]
    src=make_dataset(initial_var)
    p = make_plot(src)

    layout = column(controls, p)
    doc.add_root(layout)

Спасибо за помощь!

...