Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让bokeh在平移时动态调整y_范围_Python_R_Bokeh - Fatal编程技术网

Python 如何让bokeh在平移时动态调整y_范围

Python 如何让bokeh在平移时动态调整y_范围,python,r,bokeh,Python,R,Bokeh,我有一个很长的时间序列,Y范围随时间变化。同时,我们将X范围/视口限制在较小的时间段内,以便可以看到细节。当数据水平平移时,bokeh不会根据视口中的可见数据调整Y范围 下面是rbokeh中的一个示例(如果有用,可以提供python中的等效代码): require(rbokeh) x通过博克社区的一些指示,确定了一个解决方案。我希望将来可以将其作为一个选项添加,以避免编写(有些脆弱的)JS代码 以下是解决方案: yrange.callback <- function (var, margi

我有一个很长的时间序列,Y范围随时间变化。同时,我们将X范围/视口限制在较小的时间段内,以便可以看到细节。当数据水平平移时,bokeh不会根据视口中的可见数据调整Y范围

下面是rbokeh中的一个示例(如果有用,可以提供python中的等效代码):

require(rbokeh)

x通过博克社区的一些指示,确定了一个解决方案。我希望将来可以将其作为一个选项添加,以避免编写(有些脆弱的)JS代码

以下是解决方案:

yrange.callback <- function (var, margin=0.15)
{    
    code <- sprintf ("
        var plot = cb_obj.plots[0];

        var data = %s_data.get('data');
        var x = data['x'];
        var y = data['y'];

        var Xstart = plot.x_range.start;
        var Xend = plot.x_range.end;

        function sGE (e) { return e >= Xstart; } 
        function eGE (e) { return e >= Xend; } 
        function fixstart (i) { return i >= 0 ? i : x.length - 20; } 
        function fixend (i) { return i > 0 ? i : x.length - 1; } 

        var Istart = fixstart(x.findIndex(sGE))
        var Iend = fixend(x.findIndex(eGE))

        var yview = y.slice(Istart, Iend+1);
        var ymin = Math.min(...yview);
        var ymax = Math.max(...yview);
        var dy = ymax - ymin;

        var margin = %f * dy;
        cb_obj.start = ymin - margin;
        cb_obj.end = ymax + margin;", var, margin)

    custom_callback(code, lnames=var)
}

x <- seq(as.Date('2010-1-1'), as.Date('2017-1-1'), by='days')
len <- NROW(x)
y <- (1:len) * 5e-2 + rnorm(len, sd=10)

## render
range <- c(x[1], x[200])

figure(width=800,height=300, xlim=range) %>%
    ly_lines (x, y, lname = "points", lgroup='g1') %>%
    y_range(callback = yrange.callback('points'))
yrange.callback
yrange.callback <- function (var, margin=0.15)
{    
    code <- sprintf ("
        var plot = cb_obj.plots[0];

        var data = %s_data.get('data');
        var x = data['x'];
        var y = data['y'];

        var Xstart = plot.x_range.start;
        var Xend = plot.x_range.end;

        function sGE (e) { return e >= Xstart; } 
        function eGE (e) { return e >= Xend; } 
        function fixstart (i) { return i >= 0 ? i : x.length - 20; } 
        function fixend (i) { return i > 0 ? i : x.length - 1; } 

        var Istart = fixstart(x.findIndex(sGE))
        var Iend = fixend(x.findIndex(eGE))

        var yview = y.slice(Istart, Iend+1);
        var ymin = Math.min(...yview);
        var ymax = Math.max(...yview);
        var dy = ymax - ymin;

        var margin = %f * dy;
        cb_obj.start = ymin - margin;
        cb_obj.end = ymax + margin;", var, margin)

    custom_callback(code, lnames=var)
}

x <- seq(as.Date('2010-1-1'), as.Date('2017-1-1'), by='days')
len <- NROW(x)
y <- (1:len) * 5e-2 + rnorm(len, sd=10)

## render
range <- c(x[1], x[200])

figure(width=800,height=300, xlim=range) %>%
    ly_lines (x, y, lname = "points", lgroup='g1') %>%
    y_range(callback = yrange.callback('points'))