2016-08-04 108 views

回答

3

使用多個Y軸,並將它們分配到與由startAngle分離的窗格。

分析器

var colors = Highcharts.getOptions().colors, 
    each = Highcharts.each, 
    series = [{ 
     yAxis: 0, 
     data: [10, 20, 30] 
    }, { 
     yAxis: 1, 
     data: [1, 2, 3] 
    }, { 
     yAxis: 2, 
     data: [4, 2, 1] 
    }, { 
     yAxis: 3, 
     data: [5, 1, 3] 
    }, { 
     yAxis: 4, 
     data: [2, 3, 4] 
    }], 
    yAxis = [], 
    panes = [], 
    startAngle = 0; 

    each(series, function(serie, i) { 
    yAxis.push({ 
     pane: i, 
     showLastLabel: true, 
     gridLineWidth: i === 0 ? true : false, 
     labels: { 
     useHTML: true, 
     formatter: function() { 
      return '<span style="color:' + colors[i] + '">' + this.value + '</span>'; 
     } 
     } 
    }); 

    panes.push({ 
     startAngle: startAngle 
    }); 

    startAngle += 72; 
    }); 

圖表configuartion

$('#container').highcharts({ 
    /* 
    chart options 
    */ 
    pane: panes, 
    yAxis: yAxis, 
    series: series 
}); 

實施例:

0

我相信塞巴斯蒂安博尚的回答是堅如磐石由於他的pane屬性的建議。但是,我正在用另一種方法修補,並希望與您和社區分享。

我的解決方案利用了「虛擬」系列,這些系列是用戶看不到或與之交互的系列,但可以幫助您定製功能,如標籤。

我添加了六個「虛擬」系列,其中包含蜘蛛圖的每個輻條的標籤。第一個「零」值是空白的,但其他的將顯示沿輻條的第一,第二,第三等點的數據標籤。

圖表中籤後,我用的是功能,這些「虛擬」系列添加到圖表:

// Add "dummy series to control the custom labels. 
// We will add one for each spoke, but first will always be 
// overriden by y-axis labels; I could not figure out how to 
// disable that behavior. 
// The color, showInLegend, and enableMouseTracking attributes 
// prevent the user from seeing or interacting with the series 
// as they are only used for the custom labels. 
var chart = $('#container').highcharts(); 
var labelArray = [ 
    ['','1','2','3','4','5'], 
    ['','j','k','l','m','n'], 
    ['','one','two','three','four','five'], 
    ['','u','v','w','x','y'], 
    ['','a','b','c','d','e'] 
]; 
for (var i = 0; i<=5; i++) { 
    chart.addSeries({ 
     name: 'dummy series #' + i + ' for label placement', 
     data: [ 
      { name: labelArray[0][i], y: i }, 
      { name: labelArray[1][i], y: i }, 
      { name: labelArray[2][i], y: i }, 
      { name: labelArray[3][i], y: i }, 
      { name: labelArray[4][i], y: i } 
     ], 
     dataLabels: { 
      enabled: true, padding: 0, y: 0, 
      formatter: function() { 
      return '<span style="font-weight: normal;">' + this.point.name + '</span>'; 
     } 
     }, 
     pointPlacement: 'on', 
     lineWidth: 0, 
     color: 'transparent', 
     showInLegend: false, 
     enableMouseTracking: false 
    }); 
} 

有幾項要注意:

  • lineWidth: 0color: 'transparent'使「虛擬」系列線隱形
  • showInLegend: false防止它們出現在圖例中
  • enableMouseTracking: false防止與之交互的用戶

下面是說明這是如何小提琴:http://jsfiddle.net/brightmatrix/944d2p6q/

結果看起來是這樣的:

enter image description here

剛上怪癖,我注意到在我的評論中:我無法弄清楚如何覆蓋第一個輻條上的標籤(在12點鐘位置)。如果我將y軸標籤設置爲「false」,它將拒絕顯示任何內容,即使是我在「虛擬」系列中設置的自定義數據標籤。因此,我建議你的第一個發言是你的例子中的數字標籤。

我意識到這可能是一條更復雜的路線,但我希望這對您和其他人有所幫助。

+0

感謝您的建議Mike Zavarello。這很有幫助。但在您的建議中,如果特定軸的比例與其他軸相比非常高,則不會自動進行調整。請看看這個jsfiddle。 http://jsfiddle.net/sanjaipt/ee28r4rq/1/ 有沒有什麼可能的辦法來解決這個問題呢?請建議。 – sanjaipt

+0

@sanjaipt你不能在這種圖表上繪製出諸如'[3,200,4,3,4]'等完全不同的值。蜘蛛或極座標圖的輻條全部以相同的比例或間隔工作。如果您只是想顯示**比較**而不是嚴格的數值,則可以將數據點分成適合其他輻條的比例(例如200/100以獲得2)。 –