【问题标题】:In highcharts,series without dynamic data does not shift在 highcharts 中,没有动态数据的系列不会移动
【发布时间】:2019-07-17 19:50:46
【问题描述】:

在有动态数据和没有动态数据的序列组合中,有动态数据的序列可以很容易地移位,而其他非动态数据的序列则不能完全移出。

我已在以下链接中重现了该问题:https://jsfiddle.net/8uxepk21/ 如您所见,这里有两个系列。具有静态数据的系列似乎正在发生变化,但如果您增加范围选择器的大小,则具有静态数据的系列不会完全移出图表,但仍与其他系列不同。 是否有任何选项可以在不使用 series.addpoint() 方法的情况下显式移动数据。 我使用了series.data[0].remove(),它显然工作正常,但是当一段时间后必须为同一个系列到达新数据时,这个 remove() 方法也会删除到达点。此外,如果我提供任何条件让最大点在移动时串联,即使这样也会导致性能问题。

预期结果:无论数据是静态的还是动态的,两个系列数据都必须完全移动。

// Create the chart
Highcharts.stockChart('container', {
    chart: {
        events: {
            load: function () {

                // set up the updating of the chart each second
                var series1 = this.series[0];
                setInterval(function () {
                    var x = (new Date()).getTime(), // current time
                        y = Math.round(Math.random() * 100);
                    series1.addPoint([x, y], true, true);
                }, 2000);
                var series2 = this.series[1];
                //setInterval(function () {
                    //var x = (new Date()).getTime(), // current time
                       // y = Math.round(Math.random() * 50);
                    //series2.addPoint([x, y], true, true);
                //}, 2000);
            }
        }
    },

    time: {
        useUTC: false
    },

    rangeSelector: {
        buttons: [{
            count: 1,
            type: 'minute',
            text: '1M'
        }, {
            count: 5,
            type: 'minute',
            text: '5M'
        }, {
            type: 'all',
            text: 'All'
        }],
        inputEnabled: false,
        selected: 0
    },

    title: {
        text: 'Live random data'
    },

    exporting: {
        enabled: false
    },
legend: {
                enabled: true
            },
plotOptions: {
        series: {
            marker: {
                states: {
                    hover: {
                        enabled: true,
                        animation: {duration: 100},
                        enableMouseTracking: true,
                        stickyTracking: true
                    }
                }
            }
        }
    },

tooltip:{
								shared: true,
                split: false,
  							stickyTracking: true,
                enableMouseTracking: true,
                enabled: true,
                followPointer: true,
                followTouchMove: true,
						    formatter: function(){
                var tooltip = "";
                var phaseNameList = "";
                
                //tooltip += "<b>I-unit "+ "<br/>"+ "x: "+this.x +"</b>";
                tooltip += "<b>I-unit "+ "<br/>"+ "x: "+ new Date(this.x)+
                "</b>";
                tooltip +=  "<br/>"+ "y: "+this.y +"</b>";
                tooltip +=  "<br/>"+ this + "</b>";
                return tooltip;
               }
},

    series: [{
        name: 'Random data1',
        data: (function () {
            // generate an array of random data
            var data = [],
                time = (new Date()).getTime(),
                i;

            for (i = -90; i <= 0; i += 1) {
                data.push([
                    time + i * 1000,
                    Math.round(Math.random() * 100)
                ]);
            }
            return data;
        }())
    },
    {
    name: 'Random data2',
        data: (function () {
            // generate an array of random data
            var data = [],
                time = (new Date()).getTime(),
                i;

            for (i = -90; i <= 0; i += 1) {
                data.push([
                    time + i * 1000,
                    Math.round(Math.random() * 50)
                ]);
            }
            return data;
        }())
    }]
});
<script src="https://code.highcharts.com/stock/highstock.js"></script>
<script src="https://code.highcharts.com/stock/modules/exporting.js"></script>
<script src="https://code.highcharts.com/stock/modules/export-data.js"></script>

<div id="container" style="height: 400px; min-width: 310px"></div>

【问题讨论】:

    标签: javascript highcharts


    【解决方案1】:

    要实现它,您可以将具有null 值的点添加到第二个系列。检查下面发布的代码和演示。

    代码:

      chart: {
        events: {
          load: function() {
            var chart = this,
              series1 = chart.series[0],
              series2 = chart.series[1],
              x, y;
    
            setInterval(function() {
              x = (new Date()).getTime();
              y = Math.round(Math.random() * 100);
              series1.addPoint([x, y], false, true);
              series2.addPoint([x, null], false, true);
    
              chart.redraw();
            }, 2000);
          }
        }
      }
    

    演示:

    【讨论】:

    • 谢谢。虽然它会完全正常工作,但有什么方法可以在我们使用图形的间隔而不是点数作为转移条件的地方?我遇到过highcharts的setextreme方法,但还有其他方法吗?
    • 我不确定你的意思。您能否更准确地向我解释一下您想要实现的目标是什么?
    • 实际上通过您的方法,由于您正在向系列添加空点,因此每当禁用相应的系列图例时,也会绘制 x 轴值,这与预期的不符。每当禁用图例时,也不应绘制 x 轴值。你能在这里提出一些建议吗?
    • 嗨@Wojciech Chmiel,你能检查一下这个问题吗?stackoverflow.com/questions/59052823/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多