2017-01-21 2 views
3

Я проходил через this пример на странице руководства bokeh. Мне было интересно, можно ли немного настроить действие наведения. То, что я хотел бы достичь, - создать темную взвешенную границу на зависшем многоугольнике, чтобы отделить ее от других полигонов. Вроде this листletjs пример. Также мне хотелось бы, чтобы в цветовой пачке отображалось то, что представляет каждый цвет. Я бы очень признателен за помощь.Настроить пример безработицы bokeh texas

ответ

3

Этот ответ не ведет себя точно так же, как пример leafletJS, на который вы ссылаетесь, но он почти там. Теперь пользователь может изолировать графство от зависания.

# # Uncomment the following 3 lines for display in Jupyter notebook. 
# from bokeh.io import push_notebook, show, output_notebook 
# from bokeh.resources import INLINE 
# output_notebook(resources=INLINE) 

from bokeh.io import show 
from bokeh.models import (
    ColumnDataSource, 
    HoverTool, 
    LogColorMapper, 
    CustomJS 
) 
from bokeh.palettes import Viridis6 as palette 
from bokeh.plotting import figure 

from bokeh.sampledata.us_counties import data as counties 
from bokeh.sampledata.unemployment import data as unemployment 


palette.reverse() 

counties = { 
    code: county for code, county in counties.items() if county["state"] == "tx" 
} 

county_xs = [county["lons"] for county in counties.values()] 
county_ys = [county["lats"] for county in counties.values()] 

county_names = [county['name'] for county in counties.values()] 
county_rates = [unemployment[county_id] for county_id in counties] 
color_mapper = LogColorMapper(palette=palette) 

source = ColumnDataSource(data=dict(
    x=county_xs, 
    y=county_ys, 
    name=county_names, 
    rate=county_rates, 
)) 

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

p = figure(
    title="Texas Unemployment, 2009", tools=TOOLS, 
    x_axis_location=None, y_axis_location=None 
) 
p.grid.grid_line_color = None 

p.patches('x', 'y', source=source, 
      fill_color={'field': 'rate', 'transform': color_mapper}, 
      fill_alpha=0.7, line_color="black", line_width=0.5) 


hover = p.select_one(HoverTool) 
hover.point_policy = "follow_mouse" 
hover.tooltips = [ 
    ("Name", "@name"), 
    ("Unemployment rate)", "@rate%"), 
    ("(Long, Lat)", "($x, $y)"), 
] 

code = "source.set('selected', cb_data['index']);" 
callback = CustomJS(args={'source': source}, code=code) 

hover.callback = callback 

show(p) 
+1

Прохладный, что хорошо выглядит! Благодарю. – MrPyCharm

Смежные вопросы