ChartJS 在刻度之间放置 y 轴标签 [英] ChartJS place y-axis labels between ticks
问题描述
我有以下图表:
但是,我想将 y 轴标签移动如下:
However, i'd like to shift the y axis labels to be the following:
是否可以使用 ChartJS 在刻度线之间移动 y 轴标签,如上面的示例图像所示?
Is it possible to move the y axis labels in between the tick marks with ChartJS, like shown in the example image above?
功能类似于options.scales.yAxes[].ticks.position
选项,不同之处在于它目前被定义为在y 轴的x 方向
,因为我在 y 轴的 y 方向需要它.更好的是,自动居中.
Functionality is similar to the options.scales.yAxes[].ticks.position
option, except currently it is defined as in the x direction for the y axis
, where as I need it in the y direction for the y axis. And better yet, automatically centered.
推荐答案
遗憾的是,目前 ChartJS 中没有为此提供内置方法.
Unfortunately, there is no built-in method in ChartJS for this, at the moment.
您宁愿需要创建一个图表插件来实现这一点.
You would rather need to create a chart plugin to achieve that.
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 开始)
note: this will hide the first tick (which begins at 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>
这篇关于ChartJS 在刻度之间放置 y 轴标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!