2017-05-09 9 views
0

Chart.jsとAngular2を使用してドーナツチャート内にテキストラベルを追加するにはどうすればよいですか? 私はこのトピックについていくつかの回答を見ましたが、私はIonic2アプリを使って作業しているので、誰も私のために働いていません。 これは私の簡素化コードです:Chart.jsとAngular2、Ionic2を使用したドーナツチャート内のテキスト

import { Chart } from 'chart.js'; 

    @ViewChild('doughnutCanvas') doughnutCanvas; 

    ionViewDidEnter() { 

    this.doughnutChart = new Chart(this.doughnutCanvas.nativeElement, { 

     type: 'doughnut', 
     data: { 
     labels: this.titles, 
     datasets: [{ 
      label: '# of Work', 
      data: this.times, 
      backgroundColor: [ 
      'rgba(255, 99, 132, 0.5)', 
      'rgba(54, 162, 235, 0.5)' 
      ], 
      hoverBackgroundColor: [ 
      "#FF6384", 
      "#36A2EB" 
      ] 
     }] 
     }, 
     options: { 
     responsive: true, 
     legend: { 
      display: false 
     } 
     } 
    }); 
    } 

答えて

1

これは、グラフを生成する前に、プラグインを登録/作成することによって達成することができ、あなたは次のようにプラグインを作成することができ...

Chart.plugins.register({ 
    beforeDraw: function(chart) { 
     var data = chart.data.datasets[0].data; 
     var sum = data.reduce(function(a, b) { 
      return a + b; 
     }, 0); 
     var width = chart.chart.width, 
      height = chart.chart.height, 
      ctx = chart.chart.ctx; 
     ctx.restore(); 
     var fontSize = (height/10).toFixed(2); 
     ctx.font = fontSize + "px Arial"; 
     ctx.textBaseline = "middle"; 
     var text = sum, 
      textX = Math.round((width - ctx.measureText(text).width)/2), 
      textY = height/2; 
     ctx.fillText(text, textX, textY); 
     ctx.save(); 
    } 
}); 

ᴅᴇᴍᴏ

// register plugin 
 
Chart.plugins.register({ 
 
    beforeDraw: function(chart) { 
 
     var data = chart.data.datasets[0].data; 
 
     var sum = data.reduce(function(a, b) { 
 
      return a + b; 
 
     }, 0); 
 
     var width = chart.chart.width, 
 
      height = chart.chart.height, 
 
      ctx = chart.chart.ctx; 
 
     ctx.restore(); 
 
     var fontSize = (height/10).toFixed(2); 
 
     ctx.font = fontSize + "px Arial"; 
 
     ctx.textBaseline = "middle"; 
 
     var text = sum, 
 
      textX = Math.round((width - ctx.measureText(text).width)/2), 
 
      textY = height/2; 
 
     ctx.fillText(text, textX, textY); 
 
     ctx.save(); 
 
    } 
 
}); 
 

 
// generate chart 
 
var ctx = document.getElementById('canvas').getContext('2d'); 
 
var myChart = new Chart(ctx, { 
 
    type: 'doughnut', 
 
    data: { 
 
     labels: ["Red", "Blue", "Yellow"], 
 
     datasets: [{ 
 
      data: [300, 50, 100], 
 
      backgroundColor: ["#FF6384", "#36A2EB", "#FFCE56"], 
 
      hoverBackgroundColor: ["#FF6384", "#36A2EB", "#FFCE56"] 
 
     }] 
 
    }, 
 
    options: { 
 
     responsive: false, 
 
     legend: { 
 
      display: false 
 
     } 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> 
 
<canvas id="canvas"></canvas>

+0

変更に対応するにはどうすればいいですか? –

+0

@ ChrisK.um ..何が変わりますか?グラフのサイズ? –

+0

グラフデータの合計を表示したいので、データが変更された場合は、テキストに新しい合計を表示します。 –

関連する問題