4

我正在使用 highcharts 来显示每日统计数据,我希望用户能够选择一个日期范围。

function requestData(chart, from, to, group) {
    $.ajax({
        url: '/stats/chart?from='+from+'&to='+to+'&group='+group,
        success: function(data) {
            chart.series[0].setData(data.data);
            chart.series[0].pointStart = data.start;
            chart.series[0].pointInterval = data.interval;
        },
        cache: false
    });
}

js 函数执行 ajax 调用并返回如下内容:-

{
"start":1358467200000,
"interval":86400000,
"data":[24,9,46,66,19,93,11,10,66,75,70,52,35,91,69,0,50,24,5,14,83,9,26,5,53,32,27,30,34,25,57,100]
}

如何更新图表 pointStart 和 pointInterval 值?

4

3 回答 3

6

从 Highcharts 3 开始,您可以使用series.update()

chart.series[0].update({
    pointStart: data.start
    pointInterval: data.interval,
    data: data.data
}, false); // true if you want redraw
于 2013-04-22T13:55:51.810 回答
1

我编辑了原始问题以显示解释该问题的 jsFiddle 示例,但我将提供一个可行的解决方案。

使用我的解决方案,图表不必完全重新初始化,而是删除所有系列,然后通过该Chart.addSeries()方法添加新系列。我有一种感觉Series.setData()会更有效率,但我不知道如何让它工作 - 也许有人会!

我目前的解决方案(糟透了):jsFiddle 解决方案

因此,在对原始海报的回答中,正如@jacobdalton 的回答所述,您必须更改 json 对象以匹配对象的形式options,然后将这些对象提供给Chart.setData()函数。

此外,您可能会注意到这些false参数Series.remove(false)Chart.addSeries(false)- 这些参数确保每次进行这些调用时都不会重新呈现图表,并且Chart.redraw()可以在之后调用单个参数以节省处理时间。

于 2013-03-13T20:25:21.510 回答
0

chart.series[0] doesn't have an editable pointStart or a pointInterval property. You need to assign these through a dynamic method like chart.series[0].setData() and create a full options object (right now you're only sending the value data.data which is an acceptable parameter to the function but it can also take an object -- check out the docs for setData() and for series options).

I would suggest changing your json object to match the form of the options object:

{
    "pointStart":1358467200000,
    "pointInterval":86400000,
    "data":[24,9,46,66,19,93,11,10,66,75,70,52,35,91,69,0,50,24,5,14,83,9,26,5,53,32,27,30,34,25,57,100]
}

Then send the json object directly to chart.series[0].setData(data).

于 2013-02-19T01:23:43.570 回答