gpt4 book ai didi

javascript - Charts.js 工具提示在图表上重叠文本

转载 作者:行者123 更新时间:2023-11-30 15:44:44 25 4
gpt4 key购买 nike

由于Charts.js还不支持注解,所以我在绘制图表后添加了数据点的注解。使用 ctx.fillText 如下所示。

        animation: {
animateScale: true,
animateRotate: true,
onComplete: function () {
var chartInstance = this.chart,
ctx = chartInstance.ctx;
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
ctx.textAlign = 'center';
ctx.fillStyle = this.chart.config.options.defaultFontColor;
ctx.textBaseline = 'bottom';

this.data.datasets.forEach(function (dataset, i) {
var meta = chartInstance.controller.getDatasetMeta(i);
meta.data.forEach(function (bar, index) {
data = dataset.data[index];
ctx.fillText(data, bar._model.x, bar._model.y - 5);
});
});
}
}

这很好用,除了现在工具提示显示在新添加的文本下方之外。这不是那么明显,但有时它会在不好的地方重叠,这意味着您看不到后面的工具提示。

enter image description here

有没有办法设置 ctx.fillText 或工具提示的 z-index,以便我可以正确地对它们进行分层?

最佳答案

@user3284707 实际上,您需要做的是在工具提示之前的条形顶部绘制数字,您正在绘制它们 onComplete,将它们放在所有内容之上。

我使用以下方法绘制这些数字:

Chart.plugins.register({
beforeDraw: function(chartInstance) {
if (chartInstance.config.options.showDatapoints) {
var helpers = Chart.helpers;
var ctx = chartInstance.chart.ctx;
var fontColor = helpers.getValueOrDefault(chartInstance.config.options.showDatapoints.fontColor, chartInstance.config.options.defaultFontColor);

// render the value of the chart above the bar
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, 'normal', Chart.defaults.global.defaultFontFamily);
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';
ctx.fillStyle = fontColor;

chartInstance.data.datasets.forEach(function (dataset) {
for (var i = 0; i < dataset.data.length; i++) {
var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model;
var scaleMax = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._yScale.maxHeight;
var yPos = (scaleMax - model.y) / scaleMax >= 0.93 ? model.y + 20 : model.y - 5;
var label = dataset.data[i] || '';
ctx.fillText(label.toLocaleString(), model.x, yPos);
}
});
}
}
});

注意那里的beforeDraw

希望这对 3 年后有所帮助,我花了最后 30 分钟试图解决这个问题🤣

关于javascript - Charts.js 工具提示在图表上重叠文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com