Ничего не меняется при обновлении моего слайдера в боке - PullRequest
1 голос
/ 02 апреля 2019

Я хочу представить график изменения% коммитов с течением времени с другой датой. Что означает использование времени в качестве x и% commit в качестве y. Но ничего не меняется при перетаскивании ползунка.

Я пробовал как функцию обратного вызова, так и CustomJs. Информация о данных:

Индекс: 4289 записей, с 2018-11-01 по 2018-10-31

enter image description here

Индексами являются строковые даты гггг-мм-дд.

from bokeh.layouts import gridplot
from bokeh.models import DateSlider
from bokeh.layouts import column
from bokeh.models import CustomJS, ColumnDataSource, Slider,DatetimeTickFormatter, HoverTool
source = ColumnDataSource(data={
    'x'       : temp.loc['2018-11-01']["timeStamp"],
    'y'       : temp.loc['2018-11-01']["%commit"]
})



plot_options = dict(width=700, plot_height=400,tools=[hover])

slider = DateSlider(start=min(temp.index), end=max(temp.index), value=min(temp.index), step=1, title="Date")
p = figure(**plot_options)
p.line(x='x', y='y', source = source)
p.xaxis.formatter = DatetimeTickFormatter(days="%d-%b-%Y", hours="%H:%M", seconds="%S" )

print(temp.loc[str(slider.value)].head())

def update_plot(attr, old, new):
    date = new
    print(date)
    new_data = ColumnDataSource(data={
    'x'       : temp.loc[str(date)]["timeStamp"],
    'y'       : temp.loc[str(date)]["%commit"]
})
    source.data = new_data

slider.on_change('value', update_plot)

# the part above is CustomJS solution, also doesn't work
# update_curve = CustomJS(args=dict(source=source, slider=slider), code="""
#     var data = source.data;
#     var f = str(slider.value).replace('-','/');
#     x = data['x']
#     y = data['y']
#     for (i = 0; i < y.length; i++) {
#         y[i] = Math.pow(x[i], f)
#     }
#     // necessary becasue we mutated source.data in-place
#     source.trigger('change');
# """)

# slider.js_on_change('value', update_curve)


# show the results
show(column(slider, p))

1 Ответ

0 голосов
/ 02 апреля 2019

source.data - это словарь, поэтому вы должны сделать:

def update_plot(attr, old, new):
    date = new
    new_data = {'x': temp.loc[str(date)]["timeStamp"],
                'y': temp.loc[str(date)]["%commit"] }
    source.data = new_data
...