在Plotly中使用X轴范围滑块实现Y轴自动缩放

13
据我所知,在使用x范围滑块时,无法使y轴自动缩放。 Y轴范围是根据整个x范围的y值选择的,并且在缩放后不会改变。 在波动期的蜡烛图中,这尤其令人恼火。 当您使用x范围滑块缩放时,实际上会得到平坦的蜡烛图,因为它们的波动只覆盖初始范围的一小部分。 经过一些研究,似乎已经在这方面取得了一些进展:https://github.com/plotly/plotly.js/pull/2364。 有人知道是否有适用于plotly.py的解决方案吗? 感谢您的时间。
3个回答

7

如果有帮助的话,我在 yaxis 上使用 fixedrange = False,以便能够手动缩放并调整适合的 y 范围:

yaxis = dict(
     fixedrange = False
)

0
如果你在使用日期字符串作为x轴,那么使用myDiv作为id,并且将数据存储在字典(chart_dict)中,这应该可以解决问题(如果你的图表只有一个跟踪,当然可以简化):
$('#myDiv').on('plotly_relayout', function(event, arguments){   
    var _arg=arguments;   
    var _keys = Object.keys(_arg);   
    var _str=_keys[0]; 
    window.console.log("relayout for ..",_str);   
    if( _str == "xaxis.range") {
        var new_range = _arg[_str];
            var newMax = null;
            var newMin = null;
            for (var key in chart_data){
                var lowIdx = chart_data[key][0].find(x => x.includes(new_range[0].split(" ")[0]));
                var highIdx = chart_data[key][0].find(x => x.includes(new_range[1].split(" ")[0]));
                if (lowIdx == null || highIdx == null)
                {
                    return;
                }
                var subChartData = chart_data[key][1].slice(chart_data[key][0].indexOf(lowIdx), chart_data[key][0].indexOf(highIdx));
                var netMax = Math.max.apply(Math, subChartData);
                var netMin = Math.min.apply(Math, subChartData);
                if (newMax == null || newMax < netMax)
                {
                    newMax = netMax;
                }
                if (newMin == null || newMin > netMin)
                {
                    newMin = netMin;
                }
            }
            var update = {
                    'yaxis.range': [newMin, newMax]
                };
            Plotly.relayout('myDiv', update);
    } 
});

-4
我找到的唯一解决办法是移除滑块,然后就可以使用常规的缩放工具了。
layout = go.Layout(
    xaxis = dict(
        rangeslider = dict(
            visible = False
        )
    )
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接