我想显示一个不同的颜色为负数。正如你可以看到,从这张图片的工具提示显示正确的颜色,但实际的背景本身不是。
我试过更新图表,预设数组中的颜色,将颜色应用到borderColor,但是都不起作用。这可能是一个bug。
积极
否定
这是我的代码。
const paybackChartConfig = {
type: 'line',
data: {
datasets: [{
data: yData,
backgroundColor: function (context) {
const index = context.dataIndex;
const value = context.dataset.data[index];
return value < 0 ? 'rgba(54, 162, 235, 1)' : 'rgba(53, 122, 135, 1)';
},
borderWidth: 3,
radius: 0,
tension: 0.5,
fill: true,
}],
labels: xData,
},
options: {
scales: {
x: {
display: false,
maxTicks: 15,
grid: {
display: false
},
title: {
display: true,
text: 'Year'
}
},
y: {
display: false,
maxTicksLimit: 5,
grid: {
display: false
},
title: {
display: false,
text: 'Return'
}
}
},
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
label: function (context) {
let label = context.dataset.label || '';
if (label) {
label += ': ';
}
if (context.parsed.y !== null) {
label += context.parsed.y + '%';
}
return label;
}
}
}
},
interaction: {
intersect: false,
mode: 'index',
},
spanGaps: true,
},
plugins: [{
afterDraw: chart => {
if (chart.tooltip?._active?.length) {
let x = chart.tooltip._active[0].element.x;
let yAxis = chart.scales.y;
let ctx = chart.ctx;
ctx.save();
ctx.beginPath();
ctx.moveTo(x, yAxis.top);
ctx.lineTo(x, yAxis.bottom);
ctx.lineWidth = 1;
ctx.strokeStyle = 'rgba(0, 0, 0, 0.4)';
ctx.stroke();
ctx.restore();
}
},
}],
};
const payBackChart = new Chart(document.getElementById('solarPaybackChart'), paybackChartConfig);
2条答案
按热度按时间wbgh16ku1#
如本文文档中所述,您可以将fill指定为对象,而不是将其设置为true,这样您可以告诉chart.js使用不同的颜色填充特定值以上的内容,如下所示。
ulydmbyx2#
感谢jordanwillis。他的codepen帮助我解决了这个问题。当然,解决这个问题是手动完成的,并有下面代码中的解释。
上面的代码是用Chart.js
2.x
实现的,不知道在Chart.js3.x
中是怎么实现的