Я пытаюсь использовать инструмент наведения, используя пакет Bokeh.У меня есть фрейм данных pandas со столбцами с именами «Wealth_Gap», «Infant_Mortality» и «country».Я хотел бы построить значения для Infant_Mortality и Wealth_Gap с названием страны, используемым в инструменте наведения.
Мой код следующий:
import pandas as pd
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.plotting import figure, show
data = {
'Wealth_Gap': [30.5, 27.9, 34.2],
'Infant_Mortality': [3.0, 3.2, 2.3],
'country': ['Austria', 'Belgium', 'Cyprus']
}
infant_mort_wealth_gap = pd.DataFrame(data,
columns=['Wealth_Gap', 'Infant_Mortality', 'country'])
source = ColumnDataSource(data=dict(
x = infant_mort_wealth_gap['Wealth_Gap'],
y = infant_mort_wealth_gap['Infant_Mortality'],
desc = infant_mort_wealth_gap['country']
))
p = figure( title='Infant mortality vs wealth gap',
x_axis_label='Wealth gap', y_axis_label='Infant mortality')
hover = HoverTool()
hover.tooltips = [
("index", "$index"),
("(x,y)", "($x, $y)"),
("desc", "@desc")
]
p.circle('x', 'y', size=20, source=source)
p.tools.append(hover)
show(p)
Это дает следующую ошибку:
TypeError: Object of type 'DataFrame' is not JSON serializable
Я думал, что в качестве списка будут приниматься только значения x, y и hover.Поэтому я попробовал следующее:
a = infant_mort_wealth_gap['Wealth_Gap'].tolist()
b = infant_mort_wealth_gap['Infant_Mortality'].tolist()
c = infant_mort_wealth_gap['country'].astype(str)
c = c.tolist()
и назначил следующим образом:
x = a; y = b; desc = c
, но это возвращает ту же ошибку.
Я также посмотрел онлайни использовал это: Решено: Python Bokeh Hover Tool, предоставляющее: AttributeError: неожиданный атрибут «всплывающие подсказки» для рисунка , но все еще не может его решить.
Любая помощь будет великолепна, ура.