2017-03-10 10 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

これは素晴らしいことですが、1つのことを除いて:移動された円の部分は、グラフ領域の外に落ちてしまいます。面積を広げて(最大変位を与える)、または円の半径を同様に小さくする必要があります。私はどちらかが視覚的に同じ結果を持つと仮定しますか?あなたの 'updateElement'内で' this.chart.outerRadius'などを減らそうとしましたが、何も変わりません。 – joakimk

+1

すばやく回避策として['Chart.defaults.global.layout = {padding:100}'](http://www.chartjs.org/docs/#chart-configuration-layout-configuration)を試すこともできますが、チャート全体のサイズが小さくなります。 – kennytm