2

抱歉,如果之前有人问过这个问题,但我找不到与我的问题相关的类似问题。

我遇到的问题是,当导出为 PNG、JPG 等时,该系列会加倍。因此,如果我的屏幕图表绘制了四个系列,那么在导出时它将在图例中有八个系列。

我认为问题与导出时后续执行图表的“加载”事件有关。

$(function () {

    Highcharts.setOptions({
        global: {
            useUTC: false
        }
    });

    function fnFetchData(chart) {
        // Just imagine an AJAX request has just been done to get a JSON response
        //  JSONData = $.getJSON('/FetchSales');   
        var JSONData
        JSONData = {
            seriesName: 'Sales 2013',
            data: [(Math.random() * 100) + 1, (Math.random() * 100) + 1, 
                   (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
                   (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
                   (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
                   (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
                   (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
                   (Math.random() * 100) + 1]
        };

        //alert('About to load the chart Data');

        chart.addSeries({
            name: JSONData.seriesName,
            data: JSONData.data,
            type: 'spline'
        }, true);
        chart.redraw(true);
    };


    // Create the chart
    $('#container').highcharts({
        chart: {
            events: {
                load: function () {
                    fnFetchData(this);
                }
            }
        },
        title: {
            text: 'Chart Data from load Event'
        },
        exporting: {
            enabled: true,
            scale: 2,
            filename: 'ChartWithDoubleupSeries'
        },
        spline: {
            animation: false
        },
        series: []
    });

});

我可以重现该问题,这是一个示例:

http://jsfiddle.net/FtjJF/

我一直认为导出时正在执行“加载”事件可能是一个错误,除非这是标准行为并且我需要包含和额外的选项。

版本详情:

  • Highstock JS v1.3.1 (2013-04-09)
  • Highstock JS v1.3.1 (2013-04-09) 导出模块
4

3 回答 3

1

通过务实的like导出图表,使load事件为null

var chart = $('#chart-container').highcharts();
chart.exportChart(
    {type: 'image/png', filename: 'name'},
    {chart: { events:null } });
于 2015-12-23T12:10:02.480 回答
0

目前作为替代解决方案是将系列名称存储到数组中。当加载事件被触发时,我检查系列名称以查看它是否存在于数组中。如果是这样,请不要调用 addSeries 方法。

var AvailableSeries = [];

$( chart.series).each(function(key,value){
   AvailableSeries.push(value.name);
});


if ($.inArray( 'Sales 2013' ,AvailableSeries)==-1 )  {
    chart.addSeries(name:'Sales 2013', data:[234,453,56732,435,4,45,32,232,43]});  
};

在对长期解决方案进行更多调查后,我添加了这一行“options.chart.events = null;” 到 exportpting.js 脚本。

此解决方案的问题可能是在导出图表时执行图表事件的正当原因。我想不出一个。导出时可能应该有一个选项来抑制事件:

{ exporting:{ skipEvents:true } }  
于 2013-05-26T23:59:42.220 回答
0

简单的解决方法是使用 setTimeout():

            load: function () {
                var chart = this;
                setTimeout(function() { 
                    fnFetchData(chart);
                }, 1);
            }

对我来说看起来像一个错误,报告:https ://github.com/highslide-software/highcharts.com/issues/1868 谢谢!

于 2013-05-23T14:42:17.310 回答