Bokeh Hover Tool: ново извикване source.data не съответства на информацията, която получавам

Нов съм в бокето и се опитвам да използвам информацията, която получавам от щракване върху графика, за да направя някои изчисления. За целта използвам инструмента за задържане, но информацията, която получавам, не е същата, която инструментът показва. Исках да знам дали има някой, който знае защо се случва това и как мога да го поправя.

Ето кода и връзката към екранна снимка на проблема (в жълтото поле са данните от инструмента за задържане на мишката и в червеното поле i данните, които идват при обратното извикване, можете да видите, че няма точно същите стойности и имам нужда те да бъдат еднакви)

from bokeh.plotting import figure, curdoc
from bokeh.layouts import column
from bokeh.models import ColumnDataSource


from bokeh.plotting import figure, output_file, show #para generar la ventana con el gráfico

from bokeh.layouts import layout, widgetbox
from bokeh.models import ColumnDataSource, HoverTool, Div
from bokeh.models.widgets import Slider, Select, TextInput
from bokeh.io import curdoc

import numpy as np
import matplotlib.pyplot as plt
import math
import sys

from numpy import std
from numpy import loadtxt
from math import factorial

data=loadtxt('sn1996cb-19961217.dat')
x0=data[:,0] 
x1=np.array(x0).tolist()
y0=data[:,1]
escala=10**(-int(math.log(abs(y0[0]),10)))
y1=np.array(y0*escala).tolist()


#g create a new plot with a title and axis labels
p = figure(title="simple spec example", x_axis_label='x1', y_axis_label='y1',tools="pan,box_zoom,tap,crosshair,hover,undo,reset,save")

source = ColumnDataSource(dict(x=x1, y=y1))

# add a line renderer with legend and line thickness
pglyph=p.line('x', 'y', source=source, legend="Temp.", line_width=2)


def callback(attr, old, new):
    # The index of the selected glyph is : new['1d']['indices'][0]
    print old
    print new
    print source.data['x'][new['0d']['indices'][0]]
    print source.data['y'][new['0d']['indices'][0]]

pglyph.data_source.on_change('selected',callback)

curdoc().add_root(column(p)

Благодаря предварително Ето някои от данните, които използвах:

   X              Y
   6225.4600      0.42105132
   6226.9300      0.40851378
   6228.4000      0.41226137
   6229.8700      0.47898918
   6231.3400      0.51904130
   6232.8100      0.49808285
   6234.2800      0.45037213
   6235.7500      0.46673489
   6237.2200      0.51155555
   6238.6900      0.49420002
   6240.1600      0.48368737
   6241.6300      0.52214003
   6243.1000      0.51462704
   6244.5700      0.46338871
   6246.0400      0.47318232
   6247.5100      0.51138723
   6248.9800      0.53088999
   6250.4500      0.51826417
   6251.9200      0.49449995
   6253.3900      0.51309162
   6254.8600      0.56977183
   6256.3300      0.57982910
   6257.8000      0.54101282
   6259.2700      0.56600857
   6260.7400      0.58002889
   6262.2100      0.51426512
   6263.6800      0.55789798
   6265.1500      0.62440109
   6266.6200      0.58302051
   6268.0900      0.57691693
   6269.5600      0.57917851
   6271.0300      0.56606054
   6272.5000      0.60100335
   6273.9700      0.60407531
   6275.4400      0.58860093
   6276.9100      0.58404815
   6278.3800      0.62732899
   6279.8500      0.65989542
   6281.3200      0.62683642
   6282.7900      0.62852168
   6284.2600      0.66012704
   6285.7300      0.72063363
   6287.2000      0.75088245
   6288.6700      0.76107347
   6290.1400      0.75134450
   6291.6100      0.68774039
   6293.0800      0.69790459
   6294.5500      0.72648430
   6296.0200      0.70348245
   6297.4900      0.72302675
   6298.9600      0.74398172
   6300.4300      0.82931107
   6301.9000      0.92150021
   6303.3700      0.90641701
   6304.8400      0.85761434
   6306.3100      0.83027059
   6307.7800      0.76714623
   6309.2500      0.76923496
   6310.7200      0.82726943
   6312.1900      0.81078577
   6313.6600      0.83812791
   6315.1300      0.86778289
   6316.6000      0.81616235
   6318.0700      0.83251935
   6319.5400      0.87024456
   6321.0100      0.86657965
   6322.4800      0.88162446
   6323.9500      0.91759354
   6325.4200      0.88207662
   6326.8900      0.89954311
   6328.3600      0.96470612
   6329.8300      0.98872250

person Pris    schedule 06.04.2017    source източник
comment
Можете ли да публикувате пълен пример? Или чрез свързване към файл с данни, или чрез актуализиране на примера за генериране на синтетични данни? Без да мога да тичам да проучвам, единственото нещо, което идва на ум вероятно е, че старата политика по подразбиране беше винаги да се използва предишната точка в сегмент. Наскоро беше променено в 0.12.5, за да бъде най-близкото, което би трябвало да е по-добро по подразбиране bokeh.pydata.org/en/latest/docs/releases/   -  person bigreddot    schedule 11.04.2017
comment
Качих някои от данните, които използвах   -  person Pris    schedule 18.04.2017


Отговори (1)


Подсказката по подразбиране е конфигурирана да показва позициите x и y на курсора. Ако искате точни стойности от вашата колона с данни, трябва да му кажете това изрично, като използвате синтаксиса @colname във формата на подсказката. (Bokeh няма начин да знае като цяло какво може да е именувало вашите колони с източник на данни)

# remove default 'hover' from tools list
p = figure(title="simple spec example", x_axis_label='x1', y_axis_label='y1',
           tools="pan,box_zoom,tap,crosshair,undo,reset,save")

# add a custom hover that actually prints from columns by specifying @x and @y
hover = HoverTool(
    tooltips=[ ("(x,y)", "(@x, @y)"), ]
)
p.add_tools(hover)

С тази промяна:

въведете описание на изображението тук

person bigreddot    schedule 19.04.2017
comment
bigreddot Благодаря ви много. - person Pris; 20.04.2017