Legend中的条形标签

时间:2017-06-29 08:53:29

标签: javascript jquery charts chart.js

我的问题类似于How to show bar labels in legend in Chart.js 2.1.6?

我希望饼图给出相同的输出,但我不想创建多个数据集。我设法做到了,但现在我找不到。

这是我的代码示例:

 var myChart = new Chart(ctx, {
    type: type_p,
    data: {
        labels: ['Lundi','Mardi'],
        datasets: [{
            data: [50,20],
            backgroundColor: color,
            borderColor: color,
            borderWidth: 1
        }]
    }

我想要一个饼图相同的图例,但是有一个条形图: pie chart

这是一种方法吗?

1 个答案:

答案 0 :(得分:3)

要实现此目的,您必须根据数据集的 labels 数组生成自定义标签(使用generateLabels()功能)。

legend: {
   labels: {
      generateLabels: function(chart) {
         var labels = chart.data.labels;
         var dataset = chart.data.datasets[0];
         var legend = labels.map(function(label, index) {
            return {
               datasetIndex: 0,
               fillStyle: dataset.backgroundColor && dataset.backgroundColor[index],
               strokeStyle: dataset.borderColor && dataset.borderColor[index],
               lineWidth: dataset.borderWidth,
               text: label
            }
         });
         return legend;
      }
   }
}

在图表选项中添加

ᴡᴏʀᴋɪɴɢᴡᴏʀᴋɪɴɢxᴀᴍᴘʟᴇᴀᴍᴘʟᴇ

var ctx = canvas.getContext('2d');
var chart = new Chart(ctx, {
   type: 'bar',
   data: {
      labels: ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi'],
      datasets: [{
         data: [1, 2, 3, 4, 5],
         backgroundColor: ['#ff6384', '#36a2eb', '#ffce56', '#4bc0c0', '#9966ff'],
         borderColor: ['#ff6384', '#36a2eb', '#ffce56', '#4bc0c0', '#9966ff'],
         borderWidth: 1
      }]
   },
   options: {
      scales: {
         yAxes: [{
            ticks: {
               beginAtZero: true
            }
         }]
      },
      legend: {
         labels: {
            generateLabels: function(chart) {
               var labels = chart.data.labels;
               var dataset = chart.data.datasets[0];
               var legend = labels.map(function(label, index) {
                  return {
                     datasetIndex: 0,
                     fillStyle: dataset.backgroundColor && dataset.backgroundColor[index],
                     strokeStyle: dataset.borderColor && dataset.borderColor[index],
                     lineWidth: dataset.borderWidth,
                     text: label
                  }
               });
               return legend;
            }
         }
      }
   }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="canvas"></canvas>