을 수행하는 방법을 모른다 , 텍스트 밑줄과 점에서 텍스트까지의 선을 그려야합니다. 기본적으로 x와 y 좌표를 계산하고 멀리 떨어지는 동일한 접근법을 사용합니다.
여기에는 사용자가 요청한 내용을 그리는 업데이트 된 기능이 있습니다 (각 줄마다 정확한 색상이 적용되어 있습니다 ...). 참고로, 이것은 here으로 설명되는 텍스트 밑줄 함수에 따라 달라집니다. 여기
Chart.plugins.register({
afterDatasetsDraw: function(chartInstance, easing) {
// To only draw at the end of animation, check for easing === 1
var ctx = chartInstance.chart.ctx;
// for each line
chartInstance.data.datasets.forEach(function(dataset, i) {
var meta = chartInstance.getDatasetMeta(i);
if (!meta.hidden) {
meta.data.forEach(function(element, index) {
ctx.fillStyle = element._model.borderColor;
var fontSize = 19;
var fontStyle = 'normal';
var fontFamily = 'Helvetica Neue';
ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);
// Just naively convert to string for now
var dataString = "";
if ((index != 0) && (index != 4)) {
dataString = number_format(dataset.data[index].toString(), 0, ',', ' ');
}
var padding = 20;
var position = element.tooltipPosition();
var thickness = 1;
position.x -= 10;
ctx.textAlign = 'right';
ctx.textBaseline = 'middle';
// draw text
ctx.fillText(dataString, position.x, position.y - (fontSize/2) - padding);
// underline text
var underlinePoint = underline(ctx, dataString, position.x, position.y - (fontSize/2) - padding, fontSize, element._model.borderColor, thickness, -5);
// draw line connecting text underline with point
ctx.beginPath();
ctx.strokeStyle = element._model.borderColor;
ctx.lineWidth = thickness;
ctx.moveTo(element._model.x, element._model.y);
ctx.lineTo(underlinePoint.x, underlinePoint.y);
ctx.stroke();
});
}
});
}
});
는 (귀하의 질문에서 포크) 위의 접근 방식을 보여줍니다
jsfiddle이다.
및이 https://jsfiddle.net/semenova_7oa/m3j6ne1z/ – 7oa