我有一个简单的时间序列图。
在时间序列图的顶部,我需要一个突出显示特定范围的图层。字形浮现在脑海,类似以下内容:
fig.quad(top=[10], bottom=[0], left=[0], right=[100], color="red", fill_alpha = 0.2)
现在,用户应该能够添加/删除此类字形并调整其left
和right
参数(最好通过拖动/移动左边界和右边界)。 bottom
和top
参数并不重要,应分别为-Inf
和Inf
。然后bokeh服务器应保存这些调整。
BoxEditTool
可以与矩形字形一起使用,但是我错过的功能是编辑left
和right
参数。 (我知道我可以删除和添加标志符号来更改左/右参数,但这不是一个选择,因为需要放大和调整左/右参数)。
有什么方法可以交互式地调整左右参数?还是采用完全不同的方法来突出显示特定范围?
PS我还注意到BoxEditTool
在较大的时间序列上非常慢/无响应。
答案 0 :(得分:1)
0.13版本引入了RangeTool
:
import numpy as np
from bokeh.io import show
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, RangeTool
from bokeh.plotting import figure
from bokeh.sampledata.stocks import AAPL
dates = np.array(AAPL['date'], dtype=np.datetime64)
source = ColumnDataSource(data=dict(date=dates, close=AAPL['adj_close']))
p = figure(plot_height=300, plot_width=800, tools="", toolbar_location=None,
x_axis_type="datetime", x_range=(dates[1500], dates[2500]))
p.line('date', 'close', source=source)
p.yaxis.axis_label = 'Price'
select = figure(plot_height=150, plot_width=800, y_range=p.y_range,
x_axis_type="datetime", y_axis_type=None,
tools="", toolbar_location=None)
range_rool = RangeTool(x_range=p.x_range)
range_rool.overlay.fill_color = "navy"
range_rool.overlay.fill_alpha = 0.2
select.line('date', 'close', source=source)
select.ygrid.grid_line_color = None
select.add_tools(range_rool)
select.toolbar.active_multi = range_rool
show(column(p, select))