Добавление подсказки при наведении на гистограмму боке

Я создал гистограмму в боке, используя следующий код:

TOOLS="pan,wheel_zoom,box_zoom,reset,hover"

for column in valid_columns:
    output_file_name = str( file_name + column + ".html" )
    data_values = stats[ column ].tolist()

    output_file( output_file_name )
    histogram, edges = np.histogram( data_values, bins=50 )

    source = ColumnDataSource(
        data = dict( data_value = data_values ) )

    p1 = figure( title = column, background_fill="#E8DDCB", tools=TOOLS )
    p1.quad( top = histogram, bottom = 0, left = edges[ :-1 ], right = edges[ 1: ], 
             fill_color = "#036564", line_color = "#033649" ) 

    hover = p1.select(dict(type=HoverTool))
    hover.tooltips = [ ( "Value", "@data_value" ) ]

    show( p1 )
    print( "Saved Figure to ", output_file_name )   

где действительные столбцы — это список всех столбцов, которые я хочу проверить в кадре данных pandas. Я пытаюсь добавить всплывающую подсказку, которая будет отображать количество элементов, хранящихся в каждой корзине, но я не могу этого сделать. Любая помощь будет оценена по достоинству.


person badrobit    schedule 05.03.2015    source источник


Ответы (2)


Если вы предпочитаете не использовать CDS, вы можете заменить @data_value на @top, и это должно работать с минимальным редактированием:

hover = HoverTool(tooltips = [('Value', '@top')])
p.add_tools(hover)

то есть редактирование примера histogram.py таким образом тоже работает:

from bokeh.models import HoverTool

def make_plot(title, hist, edges, x, pdf, cdf):
    p = figure(title=title, tools='', background_fill_color="#fafafa")
    p.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],
       fill_color="navy", line_color="white", alpha=0.5)
    p.line(x, pdf, line_color="#ff8888", line_width=4, alpha=0.7, legend_label="PDF")
    p.line(x, cdf, line_color="orange", line_width=2, alpha=0.7, legend_label="CDF")

    p.y_range.start = 0
    p.legend.location = "center_right"
    p.legend.background_fill_color = "#fefefe"
    p.xaxis.axis_label = 'x'
    p.yaxis.axis_label = 'Pr(x)'
    p.grid.grid_line_color="white"
    hover = HoverTool(tooltips = [('Density', '@top')])
    p.add_tools(hover)
    return p
person KT12    schedule 20.10.2020

Похоже, вам не хватает нескольких вещей:

  1. Иметь source той же длины, что и histogram, а не data_values. Чтобы быть более конкретным, я думаю, вы хотите, чтобы ваш source был:

    source = ColumnDataSource( data = dict( data_value = histogram ) )
    
  2. Добавьте source к вашему вызову p1.quad, т.е.

    p1.quad( top = histogram, bottom = 0, left = edges[ :-1 ], right = edges[ 1: ], 
             fill_color = "#036564", line_color = "#033649", source = source ) 
    
person NublicPablo    schedule 17.07.2015
comment
Просто на заметку: в ближайшем будущем смешивание именованных столбцов и автоматически созданных столбцов (из буквальных значений данных) в источнике, предоставленном пользователем, не рекомендуется. (Поскольку это изменяет предоставленный пользователем источник, а это может быть неожиданным и нежелательным). Я бы предложил также поместить столбцы top, left и right в источник. - person bigreddot; 17.07.2015
comment
@bigreddot Как бы вы поместили top, left и right в исходный код? В галерее гистограмм (docs.bokeh.org/en/latest/ docs/gallery/histogram.html) эти параметры все еще используются, как показано в ответе NublicPablo, или я что-то упустил? - person Qaswed; 28.02.2020
comment
Как загрузить и использовать CDS описано в руководстве пользователя: docs.bokeh .org/en/latest/docs/user_guide/data.html - person bigreddot; 29.02.2020