Bokeh Server: нажмите на Scatter, чтобы отобразить дополнительные данные в гистограмме

У меня есть 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)

Заранее спасибо.

Я также задал этот вопрос на discourse.bokeh.org: discourse.bokeh.org/t/…

Creaner 22.12.2020 15:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
242
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я получил ответ на форуме Bokeh Discourse: https://discourse.bokeh.org/t/tap-on-scatter-to-show-additional-data-in-bar-plot/6939

Другие вопросы по теме