【问题标题】:How to add title inside doughnut chart in Angular Chart?如何在 Angular Chart 的圆环图中添加标题?
【发布时间】:2016-03-17 13:10:31
【问题描述】:

我在Angular Chart 中使用doughnut chart。我想在甜甜圈的中心放置一些文字。我已经阅读了this question's 的答案,但它们都不适合我,因为我有工具提示,并且由于某种原因,当您悬停图表时,文本会消失。此外,我需要从“外部”提供此文本 - 自定义文本,例如一个标题。

所以,我的想法是:

var options = {
    innerTitle = "This should be placed in the center of the doughnut"
}

有什么想法吗?

编辑: 我通过更改this answer 的几行添加了JS Bin

【问题讨论】:

标签: angularjs html5-canvas chart.js angular-chart


【解决方案1】:

我也对此有所尝试。这种方法基于 @RYUUSEiiSTAR 的方法和您创建的链接。仍然需要进行正确的计算以使文本居中。
我创建了一个 plunkr 来演示:https://jsfiddle.net/onoc2wmx/(新链接)。

更新
经过几个小时的黑客攻击,我更新了代码,以便您可以修改字体大小,现在它可以响应了。现在它看起来像这样:

var options = { 
  showTooltips : true,
  animation: true,
  percentageInnerCutout : 70,
  onAnimationComplete: innerTextFunction
};

var chartCtx = $("#canvas").get(0).getContext("2d");
var textCtx = $("#text").get(0).getContext("2d");
var chart = new Chart(chartCtx).Doughnut(doughnutData, options);


function innerTextFunction() {
  var canvasWidthvar = $('#canvas').width();
  var canvasHeight = $('#canvas').height();
  var constant = 114;
  var fontsize = (canvasHeight/constant).toFixed(2);
  textCtx.font = fontsize + "em Verdana";
  textCtx.textBaseline="middle"; 
  var total = 0;
  $.each(doughnutData,function() {
    total += parseInt(this.value,10);
  });
  var tpercentage = ((doughnutData[0].value/total)*100).toFixed(2)+"%";
  var textWidth = textCtx.measureText(tpercentage).width;
  var txtPosx = Math.round((canvasWidthvar - textWidth)/2);
  textCtx.fillText(tpercentage, txtPosx, canvasHeight/4);
}     


<div style="position: relative;">
    <canvas id="text" style="z-index: 1; position: absolute; 
                   left: 0px; top: 0px; width: 300px; height: 300px;"></canvas>
    <canvas id="canvas" style="z-index: 2; position: absolute; 
                   left: 0px; top: 0px; width: 300px; height: 300px;"></canvas>
</div>

【讨论】:

  • 感谢您的回答,但如果您注意到文字模糊不清。它不像图表那样清晰/清晰。你知道怎么解决吗?
【解决方案2】:

我会尝试一下。这种方法只是将标签绝对定位在画布顶部。唯一的缺点是您必须设置#canvas-holdercanvas 的高度和宽度。我创建了一个 plunkr 来演示:http://plnkr.co/edit/kT63Ur5ebNm1A6bQWSlO

<!-- css -->
#canvas-holder {
  height: 100px;
  width: 100px;
  position: relative;
}

.chart-title {
  position: absolute;
  left: 0;
  right: 0;
  margin: 0 auto;
  top: 50%;
  transform: translateY(-50%);
  width: 100%;
  text-align: center;
}

<!-- canvas -->
<div id="canvas-holder">
    <label class="chart-title">My Chart Title</label>
    <canvas id="chart-area" height="100" width="100" />
</div>

【讨论】:

  • 谢谢!这是一个不错且简单的解决方案,我什至会在其他地方使用它——投票给我 :)
  • 看起来相当简洁和简单。 +1
【解决方案3】:

只需调整bottomfont-size css 上的%

<div class="row charDonut">
   <div class="chartTitle">
     {{vm.totalTask}}<br>
     {{vm.chartTitle}}
   </div>
   <canvas id="doughnut" class="chart chart-doughnut">
   </canvas>
</div>

.row.charDonut{
  position: relative;
}

.chartTitle{
  position: absolute;
  left: 0;
  right: 0;
  bottom: 36%; <<----
  text-align: center;
  font-size: 2em; <<----
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多