我有一个如下的折线图(没有任何颜色)
在这个折线图中,我想给颜色直到特定的 y 轴值。当它大于 0 时,从那个值到顶部,应该像下面那样应用渐变
为了实现这一点,下面是我的解决方案
plugins: [
{
beforeRender: function (c, options) {
var dataset = c.data.datasets[0];
var yScale = c.scales['y-axis-0'];
var yPos = yScale.getPixelForValue(0);
let nonZeroPoint;
for (var i = 0; i < dataset.data.length; i++) {
if (dataset.data[i] != 0) {
nonZeroPoint= dataset.data[i];
break;
}
}
const newHeight = (yPos * nonZeroPoint) / Math.max(...dataset.data);
var gradientFill = c.ctx.createLinearGradient(0, yPos-newHeight, 0, 0);
gradientFill.addColorStop(0.1, "#fff");
gradientFill.addColorStop(1, "#7E0100");
var model = c.data.datasets[0]._meta[Object.keys(dataset._meta)[0]].$filler.el._model;
model.backgroundColor = gradientFill;
}
}
]
在此解决方案中,yPos 是图表的高度。nonZeroPoint是通过for循环计算出来的一个值,用来标识0之后的第一个数据值。
newHeight = (yPos * nonZeroPoint) / Math.max(...dataset.data);
此公式根据顶点高度及其值计算nonZeroHeight 的高度。但是我无法获得预期的结果。下面是它。我该如何解决?
代码笔: https: //codepen.io/Cicek96/pen/GRZBgpN
一只斗牛犬
相关分类