javascript - ChartJS 在刻度之间放置 y 轴标签

标签 javascript canvas graph charts chart.js

我有下图: enter image description here

但是,我想将 y 轴标签移动为以下内容:enter image description here

是否可以使用 ChartJS 在刻度线之间移动 y 轴标签,如上面的示例图片所示?

功能类似于 options.scales.yAxes[].ticks.position 选项,除了当前定义为 y 轴的 x 方向,我在 y 轴的 y 方向上需要它的地方。更好的是,自动居中。

最佳答案

不幸的是,目前 ChartJS 中没有为此内置的方法。

您宁愿需要创建一个图表插件来实现这一点。

plugins: [{
   beforeDraw: function(chart) {
      var ctx = chart.ctx;
      var yAxis = chart.scales['y-axis-0'];
      var tickGap = yAxis.getPixelForTick(1) - yAxis.getPixelForTick(0);
      yAxis.options.ticks.fontColor = 'transparent'; // hide original tick
      // loop through ticks array
      Chart.helpers.each(yAxis.ticks, function(tick, index) {
         if (index === yAxis.ticks.length - 1) return;
         var xPos = yAxis.right;
         var yPos = yAxis.getPixelForTick(index);
         var xPadding = 10;
         // draw tick
         ctx.save();
         ctx.textBaseline = 'middle';
         ctx.textAlign = 'right';
         ctx.fillStyle = 'rgba(0, 0, 0, 0.8)';
         ctx.fillText(tick, xPos - xPadding, yPos + tickGap / 2);
         ctx.restore();
      });
   }
}]

注意:这将隐藏第一个刻度(从 0 开始)

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

var barChart = new Chart(ctx, {
   type: 'bar',
   data: {
      labels: ['Jan', 'Feb', 'Mar'],
      datasets: [{
         label: 'BAR',
         data: [10, 20, 30],
         backgroundColor: 'rgba(0, 119, 204, 0.5)'
      }]
   },
   options: {
      responsive: false,
      scales: {
         yAxes: [{
            ticks: {
               beginAtZero: true
            }
         }]
      }
   },
   plugins: [{
      beforeDraw: function(chart) {
         var ctx = chart.ctx;
         var yAxis = chart.scales['y-axis-0'];
         var tickGap = yAxis.getPixelForTick(1) - yAxis.getPixelForTick(0);
         yAxis.options.ticks.fontColor = 'transparent'; // hide original tick
         // loop through ticks array
         Chart.helpers.each(yAxis.ticks, function(tick, index) {
            if (index === yAxis.ticks.length - 1) return;
            var xPos = yAxis.right;
            var yPos = yAxis.getPixelForTick(index);
            var xPadding = 10;
            // draw tick
            ctx.save();
            ctx.textBaseline = 'middle';
            ctx.textAlign = 'right';
            ctx.fillStyle = 'rgba(0, 0, 0, 0.8)';
            ctx.fillText(tick, xPos - xPadding, yPos + tickGap / 2);
            ctx.restore();
         });
      }
   }]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="ctx" height="200"></canvas>

关于javascript - ChartJS 在刻度之间放置 y 轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45240867/

相关文章:

javascript - 使用 JavaScript 在 HTML Canvas 上绘制螺旋

Java SWT - Canvas 上的透明背景?

c++ - 如何避免在 BFS 中进一步搜索顶点的邻居?我正在使用 Boost 图形库

javascript - 通过 .firstChild 属性更改 DOM 内容

Javascript 添加

javascript - 在新选项卡中打开扩展页面

javascript - 你如何为我的角色添加坐标,这是一个将继续移动的 img

java - JFreeChart 折线图 OHLCDataItem

python - 如何在 iPython 笔记本中使用 d3.js 可视化图表?

javascript - 使用Jquery和Object属性函数时出现TypeError