2017-03-18 1 views

답변

0

을 수행하는 방법을 모른다 , 텍스트 밑줄과 점에서 텍스트까지의 선을 그려야합니다. 기본적으로 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이다.