使用chart.js制作条形图时,如何为X轴添加多个不同颜色的标签?

4

我需要在使用"chart.js"时将x轴标签设置为不同的颜色。我尝试了下面的代码,但它没有起作用,只显示单一的颜色-

scales: {
  xAxes: [{    
    ticks: {
      fontColor: [
        'rgba(245,88,97,1)',
        'rgba(245,88,97,1)',
        'rgba(245,88,97,1)',
        'rgba(145,151,163,1)',
        'rgba(70,180,220,1)',
        'rgba(70,180,220,1)',
        'rgba(70,180,220,1)'
      ]
    }
  }]
}

输出:

输出:

需要: 输入图片描述

1个回答

3
您可以利用插件核心API。它提供了不同的钩子,用于执行自定义代码。在下面的代码片段中,我使用afterDraw钩子来绘制文本,其颜色与相应的条形图相同。
chart.data.labels.forEach((l, i) => {
  var value = chart.data.datasets[0].data[i];
  var x = xAxis.getPixelForValue(l);        
  ctx.fillStyle = chart.data.datasets[0].backgroundColor[i];
  ctx.fillText(l, x, yAxis.bottom + 17);
});

在绘制自定义刻度标签时,您需要指示Chart.js不要显示默认标签。可以通过在图表选项中使用以下定义来实现此目的。
scales: {
  xAxes: [{
    ticks: {
      display: false
    }
  }], 

你还需要为图表的底部定义一些填充,否则你将看不到自定义的刻度标签。
layout: {
  padding: {
    bottom: 20
  }
},

请看下面的示例代码,演示了如何根据值更改x轴上的标签。

new Chart('myChart', {
  type: 'bar',
  plugins: [{
    afterDraw: chart => {
      var ctx = chart.chart.ctx;
      var xAxis = chart.scales['x-axis-0'];
      var yAxis = chart.scales['y-axis-0'];
      ctx.save();
      ctx.textAlign = 'center';
      ctx.font = '12px Arial';
      chart.data.labels.forEach((l, i) => {
        var value = chart.data.datasets[0].data[i];
        var x = xAxis.getPixelForValue(l);        
        ctx.fillStyle = chart.data.datasets[0].backgroundColor[i];
        ctx.fillText(l, x, yAxis.bottom + 17);
      });
      ctx.restore();
    }
  }],
  data: {
    labels: ["-3", "-2", "-1", "0", "+1", "+2", "+3"],
    datasets: [{
      label: "My First Dataset",
      data: [60, 59, 80, 81, 60, 55, 40],
      fill: false,
      backgroundColor: ['rgba(245,88,97,1)', 'rgba(245,88,97,1)', 'rgba(245,88,97,1)',     'rgba(145,151,163,1)', 'rgba(70,180,220,1)', 'rgba(70,180,220,1)', 'rgba(70,180,220,1)'],
      borderWidth: 1
    }]
  },
  options: {
    layout: {
      padding: {
        bottom: 20
      }
    },
    scales: {
      xAxes: [{
        ticks: {
          display: false
        }
      }],
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
});
canvas {
  max-width: 300px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
<canvas id="myChart" height="200"></canvas>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接