перезвонить со смены слайдера, не обновляя мой сюжет в боке в лаборатории jupyter? - PullRequest
0 голосов
/ 03 мая 2019

Я работаю над визуализацией наборов данных Bokeh по нескольким категориям.Начальная часть визуала представляет собой кольцевую диаграмму категорий, показывающую общее количество предметов в каждой категории.Я пытаюсь обновить диаграмму на основе минимально-максимального диапазона, используя RangeSlider - но диаграмма не обновляется.

Источником ввода для глифов является вывод из create_cat_df, которыйвозвращается как Pandas DF, затем конвертируется в CDS с помощью ColumnDataSource.from_df().

Диаграмма выглядит нормально, когда запускается этот код (с ползунком рядом) - но перемещение ползунка ничего не меняет.

Есть похожий пост здесь .Ответ здесь был полезен, чтобы поставить меня на from_df - но даже после этого я не могу заставить код работать.

def create_doc(doc):

    ### INPUT widget
    cat_min_max = RangeSlider(start=0, end=1000, value=[0, 1000], step=1, title="Category min-max items (m)")

    inputs = column(cat_min_max, width=300, height=850)  # in preparation for multiple widgets

    ### Tooltip & tools
    TOOLTIPS_2 = [("Item", "$item")            # a sample
               ]

    hover_2 = HoverTool(tooltips=TOOLTIPS_2, names = ['cat'])
    tools = [hover_2, TapTool(), WheelZoomTool(), PanTool(), ResetTool()] 


    ### Create Figure
    p = figure(plot_width=width, plot_height=height, title="",
        x_axis_type=None, y_axis_type=None,
        x_range=(-420, 420), y_range=(-420, 420), 
        min_border=0, outline_line_color=None,
        background_fill_color="#f0e1d2",
              tools = tools, toolbar_location="left")

    p.xgrid.grid_line_color = None
    p.ygrid.grid_line_color = None

    # taptool
    url = "https://google.com/"    #dummy URL
    taptool = p.select(type=TapTool)
    taptool.callback = OpenURL(url=url)

    # create cat_source CDS using create_cat_df function (returns pandas df) and 'from_df' method
    cat_source = ColumnDataSource.from_df(create_cat_df(cat_min_max.value[0], cat_min_max.value[1]))

    ## plot category  wedges
    p.annular_wedge('centre_x', 'centre_y', 'inner', 'outer', 'start', 'end', color='color', 
                    alpha='alpha', direction='clock', source=cat_source, name='cat')

    r = row([inputs, p])

    def callback(attr, old, new):
        cat_source.data = ColumnDataSource.from_df(create_cat_df(cat_min_max.value[0], cat_min_max.value[1]))

    cat_min_max.on_change('value', callback)  

    doc.add_root(r)


show(create_doc)

Я бы хотел, чтобы код работал и обновление диаграммы.Есть еще несколько глифов и разных слоев данных для слоя, но я хочу, чтобы основы работали в первую очередь.

1 Ответ

1 голос
/ 05 мая 2019

Согласно документации Bokeh метод ColumnDataSource.from_df() возвращает словарь, в то время как вам нужно передать ColumnDatSource аргументу source в p.annular_wedge(source = cat_source)

Так что вместо:

cat_source = ColumnDataSource.from_df(create_cat_df(cat_min_max.value[0], cat_min_max.value[1]))

Вы должны сделать:

cat_source = ColumnDataSource(data = ColumnDataSource.from_df(create_cat_df(cat_min_max.value[0], cat_min_max.value[1])))
...