Я работаю над визуализацией наборов данных 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)
Я бы хотел, чтобы код работал и обновление диаграммы.Есть еще несколько глифов и разных слоев данных для слоя, но я хочу, чтобы основы работали в первую очередь.