Soy nuevo en python y quiero hacer un gráfico interactivo con un conjunto de datos dado en clase. Quiero poder mostrar simplemente los datos asociados con el punto que selecciono con TapTool en Bokeh. Sin embargo, los datos son demasiado densos para simplemente usar la herramienta flotante. Parece que la herramienta flotante no requería javascript, pero aparentemente obtener la herramienta de toque requiere conocer otro lenguaje de codificación. No estoy familiarizado con Python tal como es, por lo que agregar una devolución de llamada de JavaScript está complicando un poco las cosas.
En este momento, tengo esta figura trazada con mi marco de datos utilizando datos del conjunto de datos de Vivienda de California de sci-kit. También tengo los datos de muestra de los estados de EE. UU. desde el bokeh hasta el gráfico.
from bokeh.layouts import layout from bokeh.plotting import figure, show, output_file from bokeh.models import Circle, Div, ColumnDataSource, CustomJS, MultiChoice, HoverTool, LinearColorMapper, ColorBar from bokeh.io import output_notebook from bokeh.sampledata import us_states from bokeh.transform import transform from bokeh.models.tools import * #US state sample data us_states = us_states.data.copy() us_states = us_states["CA"] #Creating figure and adding california basemap color = LinearColorMapper(palette = 'Viridis256', low = df.MedInc.min(), high = df.MedInc.max()) color2 = LinearColorMapper(palette = 'Inferno256', low = df.price.min(), high = df.price.max()) cal = figure(title = "California Housing Data Geographic Distribution", plot_width = 1000) cal.circle('Longitude','Latitude',source = geo_source, color= transform('MedInc', color),size =2, alpha = 0.2,legend_label = "Median Income") cal.circle('Longitude','Latitude',source = geo_source, color= transform('price', color2),size =1, alpha = 0.2,legend_label = "House Price") color_bar = ColorBar(color_mapper = color, label_standoff = 14, location = (0,0), title = 'Median Income') color_bar2 = ColorBar(color_mapper = color2, label_standoff = 14, location = (0,0), title = 'House Price') cal.add_layout(color_bar,'right') cal.add_layout(color_bar2,'right') cal.legend.location = "top_right" cal.legend.click_policy="hide"Sin embargo, no tengo ni idea de qué escribir para la devolución de llamada JS para TapTool, ya que no estoy muy seguro de cómo funciona, cómo se transfieren las variables, etc.
callback = CustomJS(args=dict(source=geo_source), code=""" //Insert JS code here """) taptool = TapTool(callback=callback) geo_source.selected.js_on_change('indices', callback) cal.add_tools(taptool)deberías agregar una figura al evento Tap
plot.on_event(Tap, function)y en función puede usar índices para actualizar sus datos/gráficos
def function(): print(source.selected.indices)