bokeh выберите обратный вызов виджета, используя CustomJS для фильтрации данных и графика - PullRequest
0 голосов
/ 01 июня 2018

Я хочу добавить обратный вызов в мой виджет выбора bokeh, используя CustomJS. Мне нужно отфильтровать мой фрейм данных в соответствии с обратным вызовом из выбранного виджета.Поскольку я новичок в программировании на JavaScript, я не смог написать код для обратного вызова

    true_source=ColumnDataSource(data={'a':df.loc[, 'MONTH_YR'],
                            'b':df.loc[, 'MCOUNT'],
                            'qty':df.loc[,'MPDCQTY'],
                            'value':df.loc[,'MQTYRATE'],
                            'section':df.loc['MSECTION']})

    #I added the true_source so I could have a reference from my original dataframe while filtering

    source=ColumnDataSource(data={'x':df.loc[df['MSECTION']=='TURRET','MONTH_YR'],
              'y':df.loc[df['MSECTION']=='TURRET', 'MCOUNT'],
              'qty':df.loc[df['MSECTION']=='TURRET','MPDCQTY'],
               'value':df.loc[df['MSECTION']=='TURRET','MQTYRATE']})

    def callback_select(attr, old, new):
        s=section.value
        new_data={'x':df.loc[df['MSECTION']==s, 'MONTH_YR'],
                  'y':df.loc[df['MSECTION']==s, 'MCOUNT'],
                  'qty':df.loc[df['MSECTION']==s,'MPDCQTY'],
              'value':df.loc[df['MSECTION']==s,'MQTYRATE']}
        source.data=new_data

Поскольку я хочу развернуть HTML-файл, написание обратного вызова в python не будет работать.Поэтому я попытался написать обратный вызов, используя CustomJS.Но я уверен, что я написал это неправильно.

    callback=CustomJS(args=dict(source=source, ts=true_source), code=""""
                    var data1=ts.data;
                    var section=data1['section']
                    var a=data1['a']
                    var b=data1['b']

                    var data=source.data;
                    var f=cb_obj.value;

                    var x=[];
                    var y=[];
                    var j=0;

                    for(var i=0;i<section.length;i++){
                        if(section==f){
                        x[j].push(a[i]);
                        y[j].push(b[i]);
                        }   
                    }   
                    source.change.emit();    
                            """)

это изображение здесь показывает сюжет, выберите опцию доцентная работа

Может кто-нибудь помочь мне с этим кодом JS?

1 Ответ

0 голосов
/ 05 июня 2018

Для callbcak в python, как упоминалось в вопросе, можно создать аналог в CustomJS для реализации в htmls. Здесь var x, y, qty, значение - ключи для источника, а a, b,кол-во, значение для true_source.Я обновил источник, используя их.

callback=CustomJS(args=dict(source=source,ts=true_source), code="""
                    var data=ts.data;
                    var section=data['section'];

                    var a=data['a'];
                    var b=data['b'];
                    var qty_t=data['qty_t'];
                    var value_t=data['value_t'];

                    var data1=source.data;
                    var f=cb_obj.value;

                    var x=[];
                    var y=[];
                    var qty=[];
                    var value=[];

                    for(var i=0;i<a.length; i++){
                        if(section[i]==f){
                          x.push(a[i]);
                          y.push(b[i]);
                          qty.push(qty_t[i]);
                          value.push(value_t[i]);

                        }
                    }
                    data1['x']=x;
                    data1['y']=y;
                    data1['qty']=qty;
                    data1['value']=value;

                    source.change.emit();
            """)
...