【问题标题】:Changing axis range with RangeSlider使用 RangeSlider 更改轴范围
【发布时间】:2018-03-19 15:27:21
【问题描述】:

我已经创建了一个散景图,现在尝试向其中添加一些小部件。目前我想用 RangeSlider 改变 x 轴,但我认为回调有一些问题。附上你找到的代码:

import pandas as pd
import numpy as np
import bokeh.plotting as bp
from bokeh.models import CustomJS
from bokeh.models.widgets import RangeSlider
from bokeh.layouts import row, widgetbox
from bokeh.plotting import figure, show, output_file


df = pd.DataFrame(np.random.randint(0,30,size=(100, 3)), columns=list('ABC'))
df.index.name ='Numbers'
dt = bp.ColumnDataSource(df)

output_file("Plot.html")

p = figure(title="Example", 
       x_axis_label = "Number", y_axis_label = "Temperature in C",
       x_range=(0,100))

p.line(source=dt, x='Numbers', y='A', color='blue', legend='Line A')
p.line(source=dt, x='Numbers', y='B', color='red', legend='Line B')
p.line(source=dt, x='Numbers', y='C', color='green', legend='Line C')
p.legend.click_policy="hide"

callback = CustomJS(args=dict(p=p), code="""
                      var a = cb_obj.value;
                      p.x_range = a;
                      p.change.emit();
                      """)

range_slider = RangeSlider(start=0, end=100,value=(2,75), step=1, title="Test")
range_slider.js_on_change('value', callback)


layout = row(p,widgetbox(range_slider))
show(layout)

提前致谢!

【问题讨论】:

    标签: python bokeh rangeslider


    【解决方案1】:

    您必须在范围上分别设置 startend

    callback = CustomJS(args=dict(p=p), code="""
        var a = cb_obj.value;
        p.x_range.start = a[0];
        p.x_range.end = a[1];
    """)
    

    此外,无需调用emit

    【讨论】:

    • 太棒了!非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2017-08-02
    • 2015-09-14
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多