Filter 根据RangeTool中的Datetime筛选CDSView
我试图根据另一个图中的rangetool控制的日期范围过滤散点图(p1)的数据 这将是此处已显示内容的一个变体: 这里是MWE(不适用于p1): 我想使用“RangeTool(x_range=p.x_range)”来控制p1源的过滤器。任何帮助都将不胜感激以下是一个示例:Filter 根据RangeTool中的Datetime筛选CDSView,filter,bokeh,date-range,interaction,Filter,Bokeh,Date Range,Interaction,我试图根据另一个图中的rangetool控制的日期范围过滤散点图(p1)的数据 这将是此处已显示内容的一个变体: 这里是MWE(不适用于p1): 我想使用“RangeTool(x_range=p.x_range)”来控制p1源的过滤器。任何帮助都将不胜感激以下是一个示例: import numpy as np from bokeh.layouts import column from bokeh.models import ColumnDataSource, RangeTool, Custo
import numpy as np
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, RangeTool, CustomJS, CDSView, CustomJSFilter
from bokeh.plotting import figure, show
from bokeh.sampledata.stocks import AAPL
dates = np.array(AAPL['date'], dtype=np.datetime64)
source = ColumnDataSource(data=dict(date=dates, close=AAPL['adj_close'], volume=AAPL['volume']))
p = figure(plot_height=300, x_axis_type="datetime", x_range=(dates[1500], dates[2500]))
p.line('date', 'close', source=source)
range_tool = RangeTool(x_range=p.x_range)
p.x_range.callback = CustomJS(args=dict(source=source), code="source.change.emit();")
date_filter = CustomJSFilter(args=dict(source=source, x_range=p.x_range), code="""
let start=x_range.start;
let end=x_range.end;
let dates = source.data['date'];
let indices = [];
for (var i = 0; i <= dates.length; i++){
if (dates[i] >= start && dates[i] <= end) indices.push(i);
}
return indices;
""")
view = CDSView(source=source, filters=[date_filter])
p1 = figure(plot_height=300)
p1.circle (x='close', y='volume', source=source, view=view)
select = figure(plot_height=130, x_axis_type="datetime")
select.line('date', 'close', source=source)
select.add_tools(range_tool)
show(column(p, p1, select))
将numpy导入为np
从bokeh.layouts导入列
从bokeh.models导入ColumnDataSource、RangeTool、CustomJS、CDSView、CustomJSFilter
从bokeh.plotting导入图形,显示
从bokeh.sampledata.stocks导入AAPL
dates=np.array(AAPL['date'],dtype=np.datetime64)
source=ColumnDataSource(data=dict(日期=dates,close=AAPL['adj_close'],volume=AAPL['volume']))
p=图形(绘图高度=300,x轴类型=“日期时间”,x范围=(日期[1500],日期[2500]))
p、 行('date','close',source=source)
范围工具=范围工具(x范围=p.x范围)
p、 x_range.callback=CustomJS(args=dict(source=source),code=“source.change.emit()”)
date\u filter=CustomJSFilter(args=dict(source=source,x\u range=p.x\u range),code=“”
让开始=x_range.start;
设end=x_range.end;
让dates=source.data['date'];
设指数=[];
对于(变量i=0;i=开始日期和日期[i]
import numpy as np
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, RangeTool, CustomJS, CDSView, CustomJSFilter
from bokeh.plotting import figure, show
from bokeh.sampledata.stocks import AAPL
dates = np.array(AAPL['date'], dtype=np.datetime64)
source = ColumnDataSource(data=dict(date=dates, close=AAPL['adj_close'], volume=AAPL['volume']))
p = figure(plot_height=300, x_axis_type="datetime", x_range=(dates[1500], dates[2500]))
p.line('date', 'close', source=source)
range_tool = RangeTool(x_range=p.x_range)
p.x_range.callback = CustomJS(args=dict(source=source), code="source.change.emit();")
date_filter = CustomJSFilter(args=dict(source=source, x_range=p.x_range), code="""
let start=x_range.start;
let end=x_range.end;
let dates = source.data['date'];
let indices = [];
for (var i = 0; i <= dates.length; i++){
if (dates[i] >= start && dates[i] <= end) indices.push(i);
}
return indices;
""")
view = CDSView(source=source, filters=[date_filter])
p1 = figure(plot_height=300)
p1.circle (x='close', y='volume', source=source, view=view)
select = figure(plot_height=130, x_axis_type="datetime")
select.line('date', 'close', source=source)
select.add_tools(range_tool)
show(column(p, p1, select))