2017-03-10 100 views

回答

1

chart.js之沒有選擇切下一塊會是這樣。但你總是可以define your own chart type

這裏我將pie圖表轉化爲cutOutPie類型。圖表類使用updateElement函數配置「餅圖切片」,因此我覆蓋它並移動元素的位置。詳細信息可以通過reading the source找到。

Chart.defaults.cutOutPie = Chart.helpers.clone(Chart.defaults.pie); 
 

 
Chart.controllers.cutOutPie = Chart.controllers.pie.extend({ 
 
    updateElement: function(arc, index, reset) { 
 
     Chart.controllers.pie.prototype.updateElement.call(this, arc, index, reset); 
 
     var displacement = this.getDataset().displacements[index]||0; 
 
     var model = arc._model; 
 
     var angle = model.startAngle + model.circumference/2; 
 
     model.x += Math.cos(angle) * displacement; 
 
     model.y += Math.sin(angle) * displacement; 
 
    } 
 
}); 
 

 
new Chart('chart', { 
 
    type: 'cutOutPie', 
 
    data: { 
 
     labels: ['a', 'b', 'c', 'd', 'e', 'f'], 
 
     datasets: [{ 
 
      data: [1, 7, 2, 8, 3, 9], 
 
      backgroundColor: ['red', 'orange', 'green', 'gold', 'pink', 'blue'], 
 
      displacements: [0, 0, 40, 0, 0, 16], 
 
     }], 
 
    }, 
 
});
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> 
 
<canvas id="chart" width="400" height="300"></canvas>

+0

謝謝!我實際上正在玩Javascript,很容易找出破解的方法。但是,感謝您給出一個完美的例子,展示如何做到乾淨! – joakimk

+0

它的效果很好,除了一件事情:偏移的餅圖片段落在圖表區域之外,所以它們被裁剪掉。要麼擴大區域以騰出空間(給出最大的位移),要麼必須類似地減小餡餅的半徑。我認爲或者會有相同的結果,視覺?我嘗試在'updateElement'中減少'this.chart.outerRadius'等,但沒有任何變化。 – joakimk

+1

您可以嘗試['Chart.defaults.global.layout = {padding:100}'](http://www.chartjs.org/docs/#chart-configuration-layout-configuration)作爲快速解決方法,但是將減少整個圖表的大小。 – kennytm