Я использую Bokeh для построения данных X / Y.
Значения X и Y создаются отдельно и объединяются в один кадр данных, который будет подавать диаграмму.
Может кто-нибудь объяснить, пожалуйсталучший способ выполнить следующее:
Созданный глобальный new_df
не используется в качестве источника при запуске обратного вызова источника обновления.Это из-за новых имен столбцов / формы нового источника данных?
Настройки инструмента наведения курсора инициализируются только для исходных данных X / Y.Так что он не будет тянуть столбцы «Extra_Info» во втором примере new_df
.Каков наилучший способ заставить Hover Tool принимать дополнительные столбцы?Является ли переустановка Hover Tool внутри функции обратного вызова способом сделать это?
Вот мой полуработающий пример.Цени любую помощь.
#Imports
import bokeh
import numpy as np
import pandas as pd
from random import randint
from bokeh.layouts import column, row
from bokeh.models.widgets import Button
from bokeh.plotting import figure, curdoc, show
from bokeh.models import ColumnDataSource, HoverTool
#Creating first data source
df1 = pd.DataFrame(np.random.randint(0, 100, size = (3000, 2)),
columns = ["X", "Y"],
index = [str(i) for i in range(1, 3000 + 1)])
pointchart_source = ColumnDataSource(df1)
pointchart = figure(plot_width = 800, plot_height = 700)
pointchart_glyph = pointchart.circle("X", "Y", source = pointchart_source, size = 3.5)
hover=HoverTool(tooltips = [("(X,Y)", "($x{1,111},$y{1,111})")])
pointchart.add_tools(hover)
#Button and calback to switch source data
def on_switch_button_click():
global new_df
pointchart_source.data = ColumnDataSource.from_df(new_df)
#Should probably plugging in new data as a dictionary.
#pointchart_source.data = {'X': newdataframe['X'].values, 'Y': newdataframe['Y'].values, 'index': newdataframe.index.values}
switch_button = Button(label = "Switch", button_type = "success")
switch_button.on_click(on_switch_button_click)
#Option I
#Making a changed data source. Combined two 1D into a DF.
x=pd.DataFrame({'X_Value_For_Plot':[randint(1, 100) for i in range(0,10)], 'Common_Column':['a','b','c','d','e','f','g','h','i','j']})
y=pd.DataFrame({'Y_Value_For_Plot':[randint(1, 100) for i in range(0,10)], 'Common_Column':['a','b','c','d','e','f','g','h','i','j']})
new_df = x.merge(y,on='Common_Column')
#Option II
#Making another data source with extra columns for the Hover Tool.
x=pd.DataFrame({'X_Value_For_Plot':[randint(1, 100) for i in range(0,10)],
'X_Extra_Info':['abc','cba','sgc','ddh','eda','fdv','gdy','hsy','dsi','jdu'],
'Common_Column':['a','b','c','d','e','f','g','h','i','j']})
y=pd.DataFrame({'Y_Value_For_Plot':[randint(1, 100) for i in range(0,10)],
'Y_Extra_Info':['hsa','bsv','dyc','sdd','eac','eyf','scg','dyh','isq','jst'],
'Common_Column':['a','b','c','d','e','f','g','h','i','j']})
new_df = x.merge(y,on='Common_Column')