我正在尝试做同样的事情在这个SO答案,https://stackoverflow.com/a/66943726/1108057
不幸的是,这个答案适用于较旧版本的Chart.js,并且新版本中不支持许多所需的元素,例如直接访问_meta
属性。
我能够弄清楚如何在新版本中获取数据集的 meta,但我无法弄清楚它的其余部分,因为我不知道它在以前的版本中引用了什么。
plugins: [{
id: 'redLineLoss',
beforeRender: (x, options) => {
const c = x;
const dataset = x.data.datasets[1];
const yScale = x.scales['y'];
const yPos = yScale.getPixelForValue(0);
const gradientFill = c.ctx.createLinearGradient(0, 0, 0, c.height);
gradientFill.addColorStop(0, 'rgb(86,188,77)');
gradientFill.addColorStop(yPos / c.height, 'rgb(86,188,77)');
gradientFill.addColorStop(yPos / c.height, 'rgb(229,66,66)');
gradientFill.addColorStop(1, 'rgb(229,66,66)');
const datasetMeta = x.getDatasetMeta(1);
console.log(datasetMeta['data']);
// STUCK HERE -- what do I get from the dataset meta now?
//console.log(datasetMeta.dataset.getProps(['x', 'y']));
//console.log(model[Object.keys(x.getDatasetMeta(1))]);
//const model = x.data.datasets[1]._meta[Object.keys(dataset._meta)[1]].dataset._model;
//model.borderColor = gradientFill;
},
}],
我只想将此应用于图表中的特定数据集,而不是所有数据集。这就是为什么我选择键为1
的数据集。
1条答案
按热度按时间thtygnil1#
方案一
pointBorderColor
和pointBackgroundColor
在您只想为值的标记着色时工作得很好。为此,需要从值数组中预定义一个颜色数组。您可以逐段为折线图的
borderColor
或backgroundColor
着色。为此,您可以选择使用segment.borderColor
或segment.backgroundColor
(当设置了fill: true
时)。这些设置调用一个函数,您可以将“段”的当前开始值和结束值传递给该函数。我已经写了一个例子,包括这些以及,虽然我必须定义0值在这里,以确保该段只包括正数或负数...下面是一个例子:Chart.js Github Issue #1493
方案二
要在Chart.js 3.x或更高版本中实现渐变填充,您可以使用名为chartjs-plugin-gradient的包。我在下面提供了一个简单的示例代码: