“Text in the middle of a doughnut for charjs” 的中文翻译是:在charjs甜甜圈的中间文字

huangapple go评论49阅读模式
英文:

Text in the middle of a doughnut for charjs

问题

I everybody,

我在我的项目中使用2amigos/yii2-chartjs-widget。现在我画出了带有文本的甜甜圈。它工作正常,但如果我在左边或右边显示图例,文本就不在甜甜圈的中间。

在这里输入图片描述

我的代码:

'plugins' =>
    new \yii\web\JsExpression('
    [{
        id: \'text\',
        afterDatasetsDraw: function(chart, a, b) {
            var width = chart.width,
            height = chart.height,
            ctx=chart.ctx;
            ctx.restore();
            var fontSize = (height / 50).toFixed(2);
            ctx.font = fontSize + "em sans-serif";
            ctx.textBaseline = "middle";
            ctx.fillStyle ="rgb(200,200,200)";

            var text = '.$numVal.',
            textX = Math.round((width - ctx.measureText(text).width) / 2),
            textY = height / 2;

            ctx.fillText(text, textX, textY);
            ctx.save();
        }
    }]')

我希望你们中的一位能给我一些建议。

非常感谢...

英文:

I everybody,

i use 2amigos/yii2-chartjs-widget in my project. Now i draw doughnuts with a text inside. It works fine, but if i display a legend on left or right side, the text is not in the middle of the doughnut.

enter image description here

My code:

                'plugins' =>
                    new \yii\web\JsExpression('
                    [{
                        id: \'text\',
                        afterDatasetsDraw: function(chart, a, b) {
                            var width = chart.width,
                            height = chart.height,
                            ctx=chart.ctx;
                            ctx.restore();
                            var fontSize = (height / 50).toFixed(2);
                            ctx.font = fontSize + "em sans-serif";
                            ctx.textBaseline = "middle";
                            ctx.fillStyle ="rgb(200,200,200)";
                
                            var text = "'.$numVal.'",
                            textX = Math.round((width - ctx.measureText(text).width) / 2),
                            textY = height / 2;
                
                            ctx.fillText(text, textX, textY);
                            ctx.save();
                        }
                    }]')

I hope ones of you has a tip for me.

Thanks very much...

答案1

得分: 2

你不应该使用图表DOM元素的大小,而应该使用图表区域。

[{
  id: 'text',
  afterDatasetsDraw: function(chart) {
    const {ctx, chartArea} = chart; 
    const {left, top, width, height} = chartArea;
    ctx.save();
    var fontSize = (height / 50).toFixed(2); // 在我看来,这应该重新评估
    ctx.font = fontSize + "em sans-serif";
    ctx.textBaseline = "middle";
    ctx.fillStyle = "rgb(200,200,200)";
                    
    var text = '.$numVal.',
      textX = Math.round((width - ctx.measureText(text).width) / 2),
      textY = height / 2;
                    
    ctx.fillText(text, left + textX, top + textY);
    ctx.restore();
  }
}]
英文:

You shouldn't use the chart dom element size but the chart area.

[{
  id: 'text',
  afterDatasetsDraw: function(chart) {
    const {ctx, chartArea} = chart; 
	const {left, top, width, height} = chartArea;
    ctx.save();
    var fontSize = (height / 50).toFixed(2); // In my opinion this should be reevaluated
    ctx.font = fontSize + "em sans-serif";
    ctx.textBaseline = "middle";
    ctx.fillStyle ="rgb(200,200,200)";
                
    var text = "'.$numVal.'",
      textX = Math.round((width - ctx.measureText(text).width) / 2),
      textY = height / 2;
                
    ctx.fillText(text, left + textX, top + textY);
    ctx.restore();
  }
}]

huangapple
  • 本文由 发表于 2023年5月11日 18:37:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/76226713.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定