javascript - 在 Highcharts 中,当图表具有高数据时,工具提示不会移动,这与图表具有低数据时不同

标签 javascript highcharts

highcharts 中,当我使用 addpoint() 添加数据时,允许 'shift''true' ,当数据量大时,工具提示不会移动,就像数据量少时工具提示一样。可以通过改变rangeSelector的范围来识别数据量。有什么我可以修改的或者我应该包含一些额外的代码吗?我已在下面的链接中重现了该问题。

https://jsfiddle.net/1y3gmkt5/

// 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 = -999; 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 = -999; 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>

预期结果:当鼠标指针悬停在任何标记上并保持原样时,工具提示应在新数据到达时移到后面。目前,当范围选择器数据较少时工作正常,但当数据较多时则不行。

最佳答案

该问题是由修改数据的 dataGrouping 属性引起的。您可以通过以下方式禁用它:

plotOptions: {
    series: {
        dataGrouping: {
            enabled: false
        },
        ...
    }
}

代码片段:

// 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: {
            dataGrouping: {
                enabled: false
            },
            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 = -999; 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 = -999; 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>


现场演示: https://jsfiddle.net/BlackLabel/k52rnhya/

API引用: https://api.highcharts.com/highstock/plotOptions.series.dataGrouping.enabled

关于javascript - 在 Highcharts 中,当图表具有高数据时,工具提示不会移动,这与图表具有低数据时不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56343200/

相关文章:

javascript - 如何让滚动条停留在底部?

javascript - AngularJS - 设置动态键名

javascript - 如何更改数据表行颜色?

javascript - 我想在悬停时更改 html 类

javascript - IP 地址验证,中间有适当的点

javascript - Highchart js点击旋转展开圆弧

javascript - 删除仅包含一种类别的 Highcharts 中轴和列之间的空格

javascript - 如何让 Highchart 填满整个 bootstrap 窗口?

javascript - Highchart map 饼图 : clic and hide specific pie

javascript - 在 Highcharts.js 上显示 Google Analytics 30 天流量