Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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
Javascript X轴范围根据隐藏序列进行更改_Javascript_Jquery_Highcharts - Fatal编程技术网

Javascript X轴范围根据隐藏序列进行更改

Javascript X轴范围根据隐藏序列进行更改,javascript,jquery,highcharts,Javascript,Jquery,Highcharts,我在一个图上有两个系列。一次只能显示一个系列,但隐藏图形会影响x轴上的范围 数据是通过PHP动态生成的,但这里有两个小提琴来说明我的意思: 此代码段用于确保在任何给定时间只能显示一个系列 events: { show: function () { var chart = this.chart, series = chart.series, i = series.length, otherSerie

我在一个图上有两个系列。一次只能显示一个系列,但隐藏图形会影响x轴上的范围

数据是通过PHP动态生成的,但这里有两个小提琴来说明我的意思:

此代码段用于确保在任何给定时间只能显示一个系列

events: {
    show: function () {
        var chart = this.chart,
            series = chart.series,
            i = series.length,
            otherSeries;
            var seriesName = this['options']['name'];
            chart.yAxis[0].axisTitle.attr({
                text: seriesName
            });

        while (i--) {
            otherSeries = series[i];
            if (otherSeries != this && otherSeries.visible) {
                otherSeries.hide();
            }
        }
    }

我不知道为什么隐藏数据的图形显示到16:00,但没有任何附加数据的图形显示到15:38的最后一个数据点。Highcharts似乎考虑到了具有最大
点范围的系列的
点范围
(尽管它是隐藏的)并在此基础上显示x轴。您的“通话/小时”系列的范围是1小时,因此它可以确保如果该系列在最后有一个点,它仍然有显示的空间

我不确定是否有任何优雅的方法来解决这个问题,但在您的案例中,有一点“黑客”是将所有系列的
点范围
更改为当前显示的系列

我的粗略实现对您的代码有三个更改:

  • 默认情况下,
    visible:false
    序列也会获得
    pointRange:1
    ,因此它们不会破坏唯一可见序列的x轴范围

  • 创建图表后,我们存储每个系列的正确点范围以供将来参考,例如使用回调函数:

    $('#callFrequencyGraph').highcharts({
        // Options...
    }, function(event) {
        var series = this.series;
    
        // Store the correct point ranges
        for(var i = 0; i < series.length; i++) {
            series[i].update({
                historicalPointRange: (series[i].closestPointRange ? series[i].closestPointRange : 3600000)
            }, false);
            this.redraw();
        }
    }
    
  • 有关所有这些更改的结果,请参见。
    编辑:jsFiddle-updateforbug

    我很喜欢它,但它相当粗糙。我将等待另一个答案。如果没有一个合适的时间来,我会选择这是一个最好的答案。是的,希望有更优雅的东西。我想看看:)Ondkloss的答案是正确的,你应该使用pointRange(60000)。
    错误:属性x=“NaN”highcharts的值无效。js:54
    错误:属性width=“NaN”highcharts的值无效。js:54
    当我每小时
    historicalPointRange:(系列[I]上只有一个点时会发生错误.ClosesPointRange?系列[i].ClosesPointRange:3600000)
    看起来最好,因为它填充了图表,如果只有一个点,它通常会填充图表(我的JSON会在30秒后修复此问题,因此我可以在JSON之后看到点范围。)
    legendItemClick: function() {
        if(this.visible){
             return false;
        }
        else {
            var series = this.chart.series;
    
            for(var i = 0; i < series.length; i++) {
                series[i].update({ 
                    pointRange: this.options.historicalPointRange 
                }, false);
            }
        }
    }