2012-05-18 21 views
2

如果新數據的列(類別)比以前少,則更新高圖表時出現問題。highcharts - 將系列更新爲以前的類別較少時發生錯誤

小提琴:http://jsfiddle.net/ggoforth/bZAF7/

考慮我有這樣一個圖表:

var chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container', 
     type: 'column' 
    }, 
    xAxis: { 
     categories: ['pizza', 'french fries'] 
    }, 
    series: [{ 
     data: [55, 32] 
    }] 
}); 

,這會使得一個柱形圖有兩列。然後,通過一些按鈕,我可以:

chart.series[0].setData([55, 32, 17], false); 
chart.xAxis[0].setCategories(['pizza', 'french fries', 'nachos'], false); 
chart.redraw(); 

然後,這將更新圖表有三列。這一切都很好。但是,如果在稍後時間,我然後再刷新2列的圖表:

chart.series[0].setData([55, 32], false); 
chart.xAxis[0].setCategories(['pizza', 'french fries'], false); 
chart.redraw(); 

我得到錯誤「options is undefined」。這是可重複的,有一個演示這個問題的小提琴在這裏:http://jsfiddle.net/ggoforth/bZAF7/

在設置新數據之前,我需要在圖表上進行某種「重置」嗎?就像我說的那樣,它從2列 - > 3列起作用,但反之亦然。

感謝您的幫助!

回答

2

您可以刪除以下行:

chart.xAxis[0].setCategories(['pizza', 'french fries'], false); 

Demo

所以你可以看到,問題是,新的數據不能低於您的類別數,所以你必須首先更新你的分類比你的系列。就像下面的例子。
http://jsfiddle.net/bZAF7/6/

因此,要解決此問題,您必須將以下幾行轉換。

chart.series[0].setData([55, 32], false); 
chart.xAxis[0].setCategories(['pizza', 'french fries'], false); 

更新:格雷戈上的評論說,這是從Highcharts https://github.com/highslide-software/highcharts.com/issues/970一個bug可能它固定在最新發布Highcharts。

+0

有趣的,所以這是真正導致問題的類別。如果類別改變,你會怎麼做?在我的情況下,類別確實發生了變化(儘管我沒有在小提琴中強調這一點)。 – Greg

+0

@Greg我更新了我的問題。 –

+0

李嘉圖,這正是我的問題。我首先更新數據,然後是類別,只是簡單地移動該命令即可解決我的問題。有了這個修復,我不必刪除系列,添加一個空的,設置數據等等......完美!解決方案接受 – Greg

2

如果去掉系列和它的作品重新添加:

try { 
     chart.series[0].remove(); 
     chart.addSeries({}); 
     chart.series[0].setData([55, 32], false); 
     chart.xAxis[0].setCategories(['pizza', 'french fries'], false); 
     chart.redraw(); 
    } catch (e) { 
     alert(e); 
    } 

更新小提琴here

+0

太棒了,這是朝正確方向邁出的一步。在我的情況下,調色板很重要,所以我需要新的圖表來觀察以前的顏色設置,但是這似乎是通過了默認設置。任何想法如何保留現有的調色板?感謝你的回答! – Greg

+0

@Mark你確定這是一個很好的解決方案嗎? –

+0

Marks approach(kinda),但是裏卡多的解決了實際問題(在類別之前設置數據),保留當前的調色板,並且需要更少的代碼。謝謝你們的答案! – Greg

相關問題