Как отобразить различные идентификаторы наведения на графике с помощью Bokeh? - PullRequest
0 голосов
/ 12 июня 2018

Если мы возьмем этот географический пример из документации Bokeh , мы увидим, что название графства Техас появляется в текстовом поле, когда вы наводите указатель мыши на графство, вместе с уровнем безработицы и долготой и широтой.

enter image description here

Как мы можем получить несколько других идентификаторов, кроме Name, в это текстовое поле? Для простоты и радиаргумент, скажем, у вас были Mayor и Largest Town в качестве данных, и вы хотели отобразить их тоже в Name.Взяв код в приведенном выше примере, скажем, что у нас было что-то вроде (пожалуйста, обратитесь к ссылке для всего кода, я просто использую здесь пример)

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

source = ColumnDataSource(data=dict(
x=county_xs,
y=county_ys,
name=county_names,
identifier_2 = county_mayor # guessing here
rate=county_rates,
))

...

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

Хотя это не работает, потому что identifier_2 неизвестно / не определено.

1 Ответ

0 голосов
/ 12 июня 2018

Как продолжить

Вы можете добавить ссылку на другие переменные в инструмент наведения, сначала действительно передав их в ColumnDataSource.

  1. Сначала добавьтеданные в ColumnDataSource (убедившись, что переменная имеет то же измерение, что и другие переменные)
  2. Добавьте источник к вашей фигуре
  3. Ссылка на него внутри инструмента наведения впоследствии

Код

from bokeh.io import show
from bokeh.models import (
    ColumnDataSource,
    HoverTool,
    LogColorMapper
)
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()]
# Creating a fake mayor variable
county_mayor = ["Mayor of " + county["name"]  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)

# We add the mayor variable
source = ColumnDataSource(data=dict(
    x=county_xs,
    y=county_ys,
    name=county_names,
    rate=county_rates,
    mayor=county_mayor,
))

TOOLS = "pan,wheel_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="white", line_width=0.5)

hover = p.select_one(HoverTool)
hover.point_policy = "follow_mouse"
# And we reference the mayor in the tooltip
hover.tooltips = [
    ("Name", "@name"),
    ("Unemployment rate)", "@rate%"),
    ("(Long, Lat)", "($x, $y)"),
    ("Mayor", "@mayor")
]

show(p)    

Выход

Ожидаемый результат должен выглядеть примерно так: enter image description here

Ссылка

Ссылка для инструмента наведения по этой ссылке из документации .

...