У меня есть DataFrame, в котором хранятся данные, которые я хочу отобразить на точечной диаграмме. DataFrame содержит гораздо больше информации, чем только столбцы, необходимые для разброса данных x и y.
Я хочу показать дополнительные данные при наведении курсора (что не является проблемой), но также, если я выберу одну точку данных в разбросе, дополнительные данные в других столбцах ColumnDataSource будут отображены на гистограмме.
Моя основная проблема заключается в том, чтобы заставить гистограмму принимать данные, хранящиеся в одной выбранной строке ColumnDataSource. Все, что я видел, использует данные на основе столбцов для подачи их на гистограмму.
Я был на полпути через обходной путь, когда я использую выбранную строку ColumnDatasource, преобразую ее обратно в DataFrame, затем переношу ее (так что она основана на столбцах), а затем обратно в ColumnDataSource, но это не может быть целью создателей боке, да?
Я сократил свою проблему до минималистического фрагмента кода:
df = pd.DataFrame({"x": [1,2,3,4,5,6],
"y": [6,5,4,3,2,1],
"cat1": [11,12,13,14,15,16],
"cat2": [100,99,98,97,96,95]})
SRC = ColumnDataSource(df)
def Plot(doc):
def callback(event):
SELECTED = SRC.selected.indices
bplot = make_bPlot(SELECTED)
def make_bPlot(selected):
#Here is my question:
#How to feed the row-wise data of the SRC to the barplot?
b = figure(x_range=["cat1", "cat2"])
b.vbar(x=["cat1", "cat2"], top=["cat1", "cat2"], source=SRC)
return b
TOOLTIPS = [
("x", "@x"),
("y", "@y"),
("Category 1", "@cat1"),
("Category 2", "@cat2")]
TOOLS = "pan,wheel_zoom,zoom_in,zoom_out,box_zoom,reset,tap"
cplot = figure(tools = TOOLS, tooltips=TOOLTIPS)
cplot.circle("x", "y", source=SRC)
bplot = make_bPlot(None) # init
taptool = plot.select(type=TapTool)
cplot.on_event(Tap, callback)
layout = column(cplot, bplot)
doc.add_root(layout)
Заранее спасибо.
Я получил ответ на форуме Bokeh Discourse: https://discourse.bokeh.org/t/tap-on-scatter-to-show-additional-data-in-bar-plot/6939
Я также задал этот вопрос на discourse.bokeh.org: discourse.bokeh.org/t/…