2013-05-30 130 views
8

我有一個簡單的1系列條形圖,每個條形圖都有一個名義值。 我可以用數據標籤和軸代表每個柱的值,但我希望數據標籤和軸顯示系列總數的百分比,而標稱值顯示在懸停時的工具提示上(因此我不想在繪圖之前將數據轉換爲百分比)。簡單條形圖的高分辨率總數百分比

這裏是一個圖像顯示了我以後我在哪裏我現在:

fiddle

enter image description here

這是我目前有軸標籤的格式化功能:

plotOptions: { 
      bar: { 
       dataLabels: { 
        enabled: true, 
        formatter: function(){ 
         return Highcharts.numberFormat(this.y,0); 
        } 
       } 
      } 
     } 

是否有一些formatter函數變量我可以用來實現這個?我知道這很容易在餅圖上完成,但我認爲條形圖代表數據更好。

編輯:簡單來說,我該如何獲得所有系列積分的總和?一旦我有了這一點,是直接得到的百分比:

return Highcharts.numberFormat(100 * this.y/this.y.total,0) + "%";

其中this.y.total是該系列的總和。

回答

22

您必須遍歷數據並獲取總數,然後使用datalabel格式化函數來獲取百分比。

實施例這裏:

http://jsfiddle.net/JVNjs/319/

formatter:function() { 
    var pcnt = (this.y/dataSum) * 100; 
    return Highcharts.numberFormat(pcnt) + '%'; 
} 

編輯::

更新例如用軸標籤:

http://jsfiddle.net/JVNjs/320/

[[EDIT徵求意見

如果您試圖繪製多個系列的百分比值,則會出現各種基本問題。

如果您正在計算兩個不同數據系列的百分比,並且即使您已經繪製了原始值,也會顯示百分比值,但在大多數情況下,您的圖表會引起誤解和混淆。

以百分比值直接繪製數據是最好的方法,在這種情況下,您可以將原始數據值作爲點對象中的額外屬性添加,如果要將其顯示在工具提示或其他位置(即http://jsfiddle.net/JVNjs/735/

如果你堅持在兩個不同的系列上使用原始方法,那麼你可以創建兩個不同的變量來計算,並在格式化程序中檢查系列名稱以確定計算哪個數據總和。

+0

完美,非常感謝 – harryg

+0

不錯的建議男人;)它的工作! –

+0

這隻適用於一個系列。如果我有多個系列呢? – TechnoCrat

0

嘗試this.percentage

它在highcharts API相當有據可查的爲好。

http://api.highcharts.com/highcharts#plotOptions.series.dataLabels.formatter

編輯

因爲你需要它的非堆疊系列,你需要生成圖形之前拿到總...以下的功能你的價值加起來爲一變量,您可以在稍後使用您的格式化程序功能。

function arrayTotal(arr) 
{ 
    var total = 0; 
    for (var i = 0, value; value = arr[i]; i++) 
    { 
    total += value; 
    } 
    return total; 
} 
+0

不幸的是,這是行不通的。正如它在文檔中所說'this.percentage'只給出了一個堆疊系列片的百分比。我的系列不是堆疊的,它只是一個簡單的系列。 – harryg

+0

然後創建一個自定義函數,在將其設置爲高圖之前輸出總計。一個「for」循環,每次增加一個變量「y」就可以實現。 –