2017-05-09 65 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

我想要显示图表数据的总和,因此如果数据发生更改,我希望文本显示新的总和。 –