2012-10-05 22 views
2

我想將一系列數據添加到高分佈圖散點圖,我在這裏命名系列中的每個點。我創建以下列方式圖表:使用帶ID的數組向數據添加數據

var chart; // globally available 

makeCharts = function(){ 

     chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container1', 
      type: 'scatter' 
     },   
     series: [{ 
      name: 'a', 
       data: [{      
        'id': 'point1', 
        'x': 1, 
        'y': 2 
       }, { 
        'id': 'point2', 
        'x': 2, 
        'y': 5 
       }] 
      }] 

     }); 
} 

我想能夠使用類似更新圖上的點:

chart.series[0].setData([{id:['point3', 'point4', 'point5'], y:[0,1,2], x:[1,2,3]}]) 

,但這是不正確的。是否有可能使用這種方法更新圖表,每個點都有一個ID?

編輯:

只是爲了澄清,我想能夠直接傳遞的陣列,而不是使用addPoint()添加由點的數據點。我可以遍歷數組並用addPoint()做這樣的事情:

id:['point3', 'point4', 'point5']; 
y:[0,1,2]; 
x:[1,2,3]; 

for (i=0; i<x.length; i++) 
    { 
    chart.series[0].addPoint({ 
    x: x[[i], 
    y: y[i], 
    id: id[i] 
}); 

    } 

然而,這是非常緩慢的。這是更快的使用以下方法來添加數據:

chart.series[0].setData([[1,0],[2,1],[3,2]]); 

我發現,我可以這樣添加數據:

chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]); 

但隨後的唯一途徑,我可以訪問id當點被選中,通過this.point.config[2]。採用以下方法,我無法使用chart.get('pointID')來識別點,因爲我沒有設置ID。我希望能夠使用ID來識別點。

+0

請更新問題的狀態,如果有任何解決方案幫助標記相應,如果有什麼好心的考慮留下評論至少。 –

+0

有一個函數addSeries爲此目的 – RomanTheGreat

回答

3

那麼大致來說有兩種方式,當你想,你可以修改圖表數據動態

  1. Series.setData()用這種方式來完全替代了一些新的數據
  2. Series.addPoint()使用此方法的現有數據當你想動態添加點的一個子集。這種方法不僅是一次添加一個點,如果你再仔細閱讀文檔,你會發現,這種方法需要一個布爾重繪參數,該參數主要內容如下

重繪 :布爾型
默認爲true。是否在 之後重新繪製圖表,添加點。當添加多個點,這是非常 建議重繪選項困擾假,而是 chart.redraw()顯式調用點後加入是 完成。

在你的情況下,由於要動態補充幾點,但保留現有的點,你應該去與方法2.但是,你需要使用一個循環內,與重繪被設置爲false (因此解決的是慢的問題),然後在循環之後,調用再拉法明確地

代碼

var id = ['point3', 'point4', 'point5'], 
    y = [0, 1, 2], 
    x = [1, 2, 3]; 

for (var i = 0; i < x.length; i++) { 
    chart.series[0].addPoint({ 
     x: x[i], 
     y: y[i], 
     id: id[i] 
    },false); 
} 
chart.redraw(); 

Adding multiple points dynamically | Highcharts and Highstock @ jsFiddle

1

嘗試使用series.addPoint

chart.series[0].addPoint({ 
    x: 0, 
    y: 0, 
    id: 'anything' 
}); 

但是如果你需要爲一系列的設置數據,使用

chart.series[0].setData([{ 
    x: 0, 
    y: 0, 
    id: 'anything' 
},{ 
    x: 2, 
    y: 2, 
    id: 'another' 
}]); 
+0

感謝您的建議。我想能夠添加一個數組。我想我可以用'addpoint()'循環來遍歷一個也可以工作的數組。 – djq

+0

@celenius我可以看看你想添加的數組嗎? –

+0

我在上面的問題中加入了它:'x = [1,2,3]; y = [0,1,2]; id = ['point3','point4','point5'];' – djq

1

只要你可以通過這樣的數據:

chart.series[0].setData([[1,0, 'point3'],[2,1, 'point4'],[3,2, 'point5']]); 

(如你在質詢時所提供) ,我可以建議你使用一些小技巧。

我們需要向Highcharts.Point原型的方法applyOptions添加另一個語句。

if (typeof options[0] === 'number' && options[2] && typeof options[2] === 'string') this.id = options[2]; 

Here你可以看到它的行動。