34
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chart.js (ver 2) で値の後ろに単位(%など)を表示する方法

Last updated at Posted at 2017-02-08

概要

JavaScript で綺麗なチャートが描ける「 Chart.js
パイやドーナッツ形式でも表現できて便利なのですが
単位(%)を付けるのに手間取ったので、対応方法を残しておきます。

執筆時点の Chart.js の Version は 2.4.0 です。
1.x とは書き方が異なるので注意してください。
(1.x だと簡単に書く方法があります。逆にそれが今回ハマった原因だったり。。)

困った事

本家 Documentation も、その他の解説サイトも左図のパターンで、
私がほしかった右図のパターンがなぜか載っていませんでした。

chart_sample.png

バージョン 1.x の場合は簡単にやる方法があるので、2.x も同様の方法があるだろうと
オプション(afterLabel等)をずっと探していました。

が、結局要件を満たすものはありませんでした。
ちなみに afterLabel はこうなります。なんでや!
afterLabel.png

バージョン 2.x で単位を付けるにはどうすれば良いのか

そのうちもっと良い方法が実装されそうですが、
現状では callbacks を使うことで単位(%)を付けることができます。
ソース を見たら現状機能が無いことは一目瞭然でした)

値を割合(合計100)で表記するのも、自動でやってくれる機能は無いので
割合に計算しなおした値を使います。

右側の単位が付いたチャート.html
<canvas id="myChart" width="400" height="400"></canvas>
<script>
  var chart = new Chart(document.getElementById("myChart"),
  {
    type: "doughnut",
    data: {
      labels: ["Red", "Blue", "Yellow"],
      datasets: [
        {
          label: "Favorite color",
          data: [70, 10, 20], //データ自体を調整して合計100になるようにする
          backgroundColor: [
            'rgba(255, 99, 132, 0.8)',
            'rgba(54, 162, 235, 0.8)',
            'rgba(255, 206, 86, 0.8)'
          ]
        }
      ]
    },
    options: {
      tooltips: {
        callbacks: {
          label: function (tooltipItem, data) {
            return data.labels[tooltipItem.index]
              + ": "
              + data.datasets[0].data[tooltipItem.index]
              + " %"; //ここで単位を付けます
          }
        }
      }
    }
  });
</script>
34
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?