web-dev-qa-db-ja.com

reactのチャートjs-2からドーナツチャート内にテキストを追加します

ドーナツ円グラフ内にテキストメッセージを追加したい。より具体的には、私はこのようなものが欲しいです: enter image description here

Jqueryでchartjsを使用しているため、スタックオーバーフローで同じ問題が発生し、javascriptを初めて使用するため、混乱しました。これが私の円グラフを定義する方法です:

<Doughnut
            data={sectorsData}
            width={250}
            height={250}
            options={{
              legend: {
                display: false
              },
              maintainAspectRatio: false,
              responsive: true,
              cutoutPercentage: 60
            }}
          />
8
user7334203

私の例では、データのプロパティtextを使用して、内部テキストを指定しています。

const data = {
  labels: [...],
  datasets: [...],
  text: '23%'
};
import React from 'react';
import ReactDOM from 'react-dom';
import {Doughnut} from 'react-chartjs-2';

// some of this code is a variation on https://jsfiddle.net/cmyker/u6rr5moq/
var originalDoughnutDraw = Chart.controllers.doughnut.prototype.draw;
Chart.helpers.extend(Chart.controllers.doughnut.prototype, {
  draw: function() {
    originalDoughnutDraw.apply(this, arguments);
    
    var chart = this.chart.chart;
    var ctx = chart.ctx;
    var width = chart.width;
    var height = chart.height;

    var fontSize = (height / 114).toFixed(2);
    ctx.font = fontSize + "em Verdana";
    ctx.textBaseline = "middle";

    var text = chart.config.data.text,
        textX = Math.round((width - ctx.measureText(text).width) / 2),
        textY = height / 2;

    ctx.fillText(text, textX, textY);
  }
});

const data = {
        labels: [
                'Red',
                'Green',
                'Yellow'
        ],
        datasets: [{
                data: [300, 50, 100],
                backgroundColor: [
                '#FF6384',
                '#36A2EB',
                '#FFCE56'
                ],
                hoverBackgroundColor: [
                '#FF6384',
                '#36A2EB',
                '#FFCE56'
                ]
        }],
  text: '23%'
};

class DonutWithText extends React.Component {

  render() {
    return (
      <div>
        <h2>React Doughnut with Text Example</h2>
        <Doughnut data={data} />
      </div>
    );
  }
};

ReactDOM.render(
  <DonutWithText />,
  document.getElementById('root')
);
<script src="https://gor181.github.io/react-chartjs-2/common.js"></script>
<script src="https://gor181.github.io/react-chartjs-2/bundle.js"></script>

<div id="root">
</div>

奇妙なコンソールエラーのため、CodeSnippetを実行しているときに表示するには、少し下にスクロールする必要があります。

私が書いたCodePenでは正しく動作します: http://codepen.io/anon/pen/OpdBOq?editors=101

6
K Scandrett