2012-12-31 30 views
60

我很努力地理解更新高圖表的正確方法。假設我已經繪製了圖表,然後我想以某種方式更新它。例如,我可能想要更改數據系列的值,或者我可能想要啓用dataLabels。Highcharts - redraw()與new Highcharts.chart

目前唯一能找出如何做到這一點的方法是更改​​圖表選項,並使用new Highcharts.chart來告訴highchart重繪。

不過,我不知道是否這可能是矯枉過正,並有可能改變「原位」的圖表,而不必從頭開始new Highcharts.chart。我注意到有一個redraw()方法,但我似乎無法得到它的工作。

任何幫助,非常感謝。

謝謝,

羅賓

樣本代碼如下,並在底部有一個的jsfiddle

$(document).ready(function() { 

chartOptions = { 
    chart: { 
     renderTo: 'container', 
     type: 'area', 
    }, 
    series: [{ 
     data: [1,2,3] 
    }] 
}; 

chart1 = new Highcharts.Chart(chartOptions); 


chartOptions.series[0].data= [10,5,2]; 
chart1 = new Highcharts.Chart(chartOptions); 

//The following seems to have no effect 
chart1.series[0].data = [2,4,4]; 
chart1.redraw(); 

});​ 

http://jsfiddle.net/sUXsu/18/

[編輯]:

對於任何這個問題的未來觀衆,這是不值得的沒有辦法隱藏和顯示dataLabels。下面介紹如何做到這一點:http://jsfiddle.net/supertrue/tCF8Y/

+3

需要您的顯示/隱藏dataLabels例如鏈接的HighCharts源URL更新(這是404ing ),並且需要更新jQuery。我已經在http://jsfiddle.net/supertrue/tCF8Y/ – supertrue

回答

67

chart.series[0].setData(data,true);

setData方法本身將調用再拉法

+1

其不更新工具提示,鼠標懸停工具提示只顯示舊數據 –

+0

它需要大約13-15秒的時間更新多個系列 –

+1

欲瞭解更多信息:https://api.highcharts.com/class-reference/Highcharts。 Series.html#使用setData –

7

你必須調用設置調用重繪前添加圖表對象上功能。

chart.xAxis[0].setCategories([2,4,5,6,7], false); 

chart.addSeries({ 
    name: "acx", 
    data: [4,5,6,7,8] 
}, false); 

chart.redraw(); 
+0

這樣做了它對我來說thanx .. !! 當您使用大量在單頁上有大量數據的圖表時,更新圖表是一種更好的方法。爲每個系列調用重繪都可能導致瀏覽器崩潰。 – Ritesh

+0

我正在研究實時應用程序,如果更新頻率增加,我希望更新highmap,但它的崩潰瀏覽器。 –

5
var newData = [1,2,3,4,5,6,7]; 
var chart = $('#chartjs').highcharts(); 
chart.series[0].setData(newData, true); 

說明:
可變newData包含要在圖表更新值。變量chart是圖表的一個對象。 setData是由高圖提供的用於更新數據的方法。

方法setData包含兩個參數,在第一個參數中,我們需要傳遞新值作爲數組,第二個參數是布爾值。如果true然後海圖更新自身,如果false那麼我們就必須使用redraw()方法來更新圖表(即chart.redraw();

http://jsfiddle.net/NxEnH/8/