1 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
所以有幾點(diǎn)建議:
我認(rèn)為您會(huì)希望這兩個(gè)圖都使用相同的方法,因?yàn)樗鼈冎g的 columndatasource 是通用的,并且如果它們?cè)谕环秶鷥?nèi),您可以在它們之間設(shè)置 CustomJS 行為。
index
您正在使用的 已經(jīng)存在于您的self.df
繪圖中,一旦它出現(xiàn)在您的繪圖中,將更容易與之交互,因?yàn)槟梢允褂?JS 繪圖行為來(lái)處理它,而不是返回到 python 變量并重新加載數(shù)據(jù)。不要為“突出顯示”點(diǎn)繪制新字形,而是考慮使用內(nèi)置的“懸?!被颉斑x定”功能。
hover_color='red'
例如,可以替換繪制和移動(dòng)另一類(lèi)字形。如果您想保持靜態(tài)選中狀態(tài),以便在屏幕截圖中無(wú)需鼠標(biāo)即可生成漂亮的報(bào)告,請(qǐng)使用的內(nèi)置selected
屬性定義回調(diào)ColumnDataSource
我可以發(fā)布一些帶有更具體示例的實(shí)際代碼塊,但如果這些點(diǎn)中的任何一點(diǎn)對(duì)于您的實(shí)際用例來(lái)說(shuō)是一個(gè)硬停止,它將推動(dòng)解決方案。
編輯:
所以我使用一個(gè)類(lèi)方法非常接近 - 問(wèn)題是能夠從第一個(gè)方法編輯第二個(gè)圖,而不是對(duì)它ColumnDataSource
本身的實(shí)際更改。
def plot_it(self):
self.plot_signal = figure(x_range=(450, 550), y_range=(-1, 1), title='signal')
self.plot_signal.line(x='index', y='z', source=self.source)
self.plot_signal.segment(x0=500, y0=-2, x1=500, y1=2, source=self.source)
self.plot_path = figure(title='sensor')
self.plot_path.scatter(x='x', y='y', source=self.source, hover_color='red')
jscode='''
var data = source.data;
var plot_signal = plot_signal;
var index = cb_data.index['1d'].indices;
var xmin = 0;
var xmax = 0;
if (index > 0) {
xmin = index[0] - 50;
xmax = index[0] + 50;
plot_signal.x_range.end = xmax;
plot_signal.x_range.start = xmin;
plot_signal.change.emit();
}
hover_callback = CustomJS(args=dict(source=self.source, plot_signal=self.plot_signal), code=jscode)
hover.tooltips = [('index', '@index'), ('sensor', '@z')]
self.plot_path.add_tools(hover)
def get_grid(self):
self.plot_it()
grid = gridplot([[self.plot_path], [self.plot_signal]])
return grid
除了移動(dòng)線(xiàn)段之外,這應(yīng)該做所有事情。我找不到要添加的段命名約定plot_signal.SOMEOBJECT.x0,.x1但它只會(huì)if (index > 0)像使用index[0]. 我去掉了一些樣式選項(xiàng),因?yàn)槲艺趶牧硪慌_(tái)計(jì)算機(jī)轉(zhuǎn)錄。
這個(gè)關(guān)于移動(dòng)線(xiàn)段的問(wèn)題可能會(huì)為您提供段 JSON 對(duì)象的語(yǔ)法。
添加回答
舉報(bào)