Как вставить всплывающие подсказки в точечный график с помощью bqplot - PullRequest
1 голос
/ 01 мая 2020

У меня есть pandas фрейм данных (df) с 4 столбцами, названными «name», «nb», «a» и «b», которые характеризуют человека с его именем, его номером («nb») ) и некоторые значения («a» и «b»), связанные с ним.

import pandas as pd
data = {
    "name": ["Thomas", "John", "Anna", "Ben", "Arlette"],
    'nb': [1,2,3,4,5],
    "a": [0, 2, 13, 43, 90],
    "b": [4, 24, 31, 2, 3],
}
df = pd.DataFrame(data)

Я хотел бы создать точечную диаграмму со значениями "a" и "b", где имя и идентификатор будут отображаться во всплывающей подсказке. Я думаю, что я могу сделать это с помощью библиотеки bqplot.

Я написал следующий код:

from bqplot import pyplot as plt
from bqplot import Tooltip
from bqplot import Scatter

fig = plt.figure(title='My title')

def_tt = Tooltip(fields=['name','nb'], formats = ['','.2f'], labels = ['Name','Nb'],show_labels = True )

chart = plt.scatter(df["a"],df["b"], colors = ['red'], tooltip = def_tt, stroke = 'red', unhovered_style ={'opacity':0.5})
fig

Но всплывающие подсказки пусты, хотя появляются метки. Я думаю, что что-то упущено в строке def_tt, параметры полей, вероятно, неверны.

1 Ответ

0 голосов
/ 01 мая 2020

С помощью всплывающих подсказок bqplot вы можете ссылаться только на поля фактической метки. Так что-то вроде этого должно работать:

def_tt = Tooltip(fields=['index', 'x', 'y'], formats = ['','.2f'],)

Если вы хотите выбрать другое поле из вашего фрейма данных, то вам нужно

1) создать выходной виджет

2) определить функцию для запуска при наведении курсора на маркер

3) установить этот выходной виджет в качестве всплывающей подсказки

4) установить эту функцию для отображения метаданных в выходном виджете, когда Вы наводите знак.

from bqplot import pyplot as plt
from bqplot import Tooltip
from bqplot import Scatter
from ipywidgets import Output

fig = plt.figure(title='My title')
out = Output(). # 1

def def_tt(_, event):  # 2
    out.clear_output()
    with out:
        print(df.loc[event['data']['index'], 'name'])

chart = plt.scatter(
    df["a"], df["b"], colors = ['red'], 
    tooltip = out, # 3
    stroke = 'red', unhovered_style ={'opacity':0.5}
)
chart.on_hover(def_tt) # 4
fig

enter image description here

...