Maison  >  Questions et réponses  >  le corps du texte

Comment mettre du texte dans un graphique en anneau à l'aide de React-chartjs-2.js ?

Comment insérer du texte dans un graphique en anneau à l'aide de React-chartjs-2.js et Typescript lorsque le titre du graphique est en haut et que l'étiquette se trouve sur le côté droit du graphique en anneau. Les solutions que j'ai trouvées jusqu'à présent ne semblent pas fonctionner avec les balises latérales ou React/TS.

Voici ce que j'ai maintenant :

...

setOptions({
   responsive: true,
   plugins: {
     legend: {
       position: 'right',
       rtl : true,
       labels: {
         usePointStyle: true,
         pointStyle: 'circle',
       }
     },
     title: {
       display: true,
       text: 'Title',
       font: {
         size: 25,
       }
     }
   },
});
    
setPlugins ({
    id: "tooltipLine",
    beforeDraw: function(chart) {
      var width = chart.width,
      height = chart.height,
      ctx = chart.ctx;
      ctx.restore();
      var fontSize = (height / 160).toFixed(2);
      ctx.font = fontSize + "em sans-serif";
      ctx.textBaseline = "top";
      var text = "Foo-bar",
      textX = Math.round((width - ctx.measureText(text).width) / 2),
      textY = height / 2;
      ctx.fillText(text, textX, textY);
      ctx.save();
    }
})
<Doughnut id="pieChart" data={data} options={options} plugins={[plugins] as any}/>

Mais cela place simplement le texte au milieu de la toile entière, pas au milieu du beignet.

P粉378264633P粉378264633173 Il y a quelques jours363

répondre à tous(1)je répondrai

  • P粉872101673

    P粉8721016732024-03-31 13:50:37

    const plugins = [{
            beforeDraw: function(chart) {
                var width = chart.width,
                    height = chart.height,
                    ctx = chart.ctx;
                ctx.restore();
                var fontSize = (height / 160).toFixed(2);
                ctx.font = fontSize + 'em sans-serif';
                ctx.textBaseline = 'top';
    
                // Draw "Total" on the first line
                var text1 = 'Total';
                var textX1 = Math.round((width - ctx.measureText(text1).width) / 2);
                var textY1 = height / 2.5;
                ctx.fillText(text1, textX1, textY1);
    
                // Draw the number on the second line
                var text2 = totalStatusCountRef.current;
                var textX2 = Math.round((width - ctx.measureText(text2).width) / 2);
                var textY2 = height / 1.9;
                ctx.fillText(text2, textX2, textY2);
    
                ctx.save();
            }
        }];
         

    répondre
    0
  • Annulerrépondre