MENU
カタログクリップ
本ページはプロモーションを含みます。

Chart.jsのパイチャートで、データ割合をパーセント表示する方法!

2020 6/28
広告
コンピューター
2017年11月4日2020年6月28日

Chart.jsのパイチャートやドーナッツチャートで、データ割合をパーセント表示する方法を紹介します。

目次

方法

次のような流れで、パーセント表示を行います。

  1. データの合計値を求めます
  2. データ値を合計値で割ってデータ割合を求めます
  3. ラベルとしてパイ中に表示します

データの合計値を求める

まず、データの合計値は、次のようにデータセットごとに求めます。

chart.data.datasets.forEach(function (dataset, i) {
    var dataSum = 0;
    dataset.data.forEach(function (element){
        dataSum += element;
    });
});

data配列を、forEachで回して総和を求めています。

データ割合を求める

次に、パーセント表示に使うデータ割合は、次のように求めます。

(Math.round(dataset.data[index] / dataSum * 100 * 10)/10).toString() + "%";

そのまま、float値をtoString()にかけると、”12.3456789″などと、小数点以下の桁数が多くなってしまうので、適宜Math.round()で丸めます。

上の例では、10倍したものを丸めてから10で割ることにより、12.3% などと小数点以下1桁まで表示するようにしています。

パイ中にラベルを表示する

パイ中にラベルを表示するには、プラグインを使用します。具体的な方法は次の記事で詳しく解説していますので参考にしてください。

Chart.jsで、ラベルやデータ値を常に表示する方法。パイチャートで便利!

例

この一連の作業を行うと、次のようにパイ中にパーセント割合をラベル表示することができます。

 

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.bundle.min.js"></script>
<div class="chart-container" style="position: relative; height:50vh; width:80vw">
<canvas id="myChart"></canvas>
</div>
<script>
                    var dataLabelPlugin = {
                        afterDatasetsDraw: function (chart, easing) {
                            // To only draw at the end of animation, check for easing === 1
                            var ctx = chart.ctx;

                            chart.data.datasets.forEach(function (dataset, i) {
                                var dataSum = 0;
                                dataset.data.forEach(function (element){
                                    dataSum += element;
                                });

                                var meta = chart.getDatasetMeta(i);
                                if (!meta.hidden) {
                                    meta.data.forEach(function (element, index) {
                                        // Draw the text in black, with the specified font
                                        ctx.fillStyle = 'rgb(255, 255, 255)';

                                        var fontSize = 12;
                                        var fontStyle = 'normal';
                                        var fontFamily = 'Helvetica Neue';
                                        ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);

                                        // Just naively convert to string for now
                                        var labelString = chart.data.labels[index];
                                        var dataString = (Math.round(dataset.data[index] / dataSum * 1000)/10).toString() + "%";

                                        // Make sure alignment settings are correct
                                        ctx.textAlign = 'center';
                                        ctx.textBaseline = 'middle';

                                        var padding = 5;
                                        var position = element.tooltipPosition();
                                        ctx.fillText(labelString, position.x, position.y - (fontSize / 2) - padding);
                                        ctx.fillText(dataString, position.x, position.y + (fontSize / 2) - padding);
                                    });
                                }
                            });
                        }
                    };
                   
                    // Chart
                    var myChart = "myChart";
                    var chart = new Chart(myChart, {
                        type: 'pie',
                        data: {
                            labels: ["A", "B", "C", "D", "E", "F", "G"],
                            datasets: [{
                                label: "Sample",
                                backgroundColor: ["#3F51B5", "#F44336", "#FF9800", "#4CAF50", "#9C27B0", "#00BCD4", "#E91E63"],
                                data: [128, 120, 46, 82, 67, 46, 16],
                            }]
                        },
                        options: {
                            title: {
                                display: true,
                                text: "Sample"
                            },
                            legend:{
                            },
                            maintainAspectRatio: false,
                        },
                        plugins: [dataLabelPlugin],
                    });
</script>

まとめ

このようにChart.jsでもgoogle chart APIのようにパイチャート中にパーセント表示を行う事ができます。

是非試してみてくださいね。

以上、Chart.jsのパイチャートで、データ割合をパーセント表示する方法!でした。

コンピューター
highlightjs

関連記事

  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
    2025年4月16日
  • AXE5400VとAX80Vの3つの違い。[Wi-Fiルーター]
    2025年4月7日
  • Archer AXE5400とAX80の3つの違い。[Wi-Fiルーター]
    2025年4月7日
  • Archer AXE5400とAX5400の3つの違い。[Wi-Fiルーター]
    2025年4月6日
  • Archer AX3000とAX1800の2つの違い。[Wi-Fiルーター]
    2025年4月6日
  • Archer AX3000VとAX23Vの2つの違い。[Wi-Fiルーター]
    2025年4月5日
  • Archer AX80とAX5400の3つの違い。[Wi-Fiルーター]
    2025年4月5日
  • Archer AX80VとAX73Vの3つの違い。[Wi-Fiルーター]
    2025年4月5日
カテゴリー
  • コンピューター
    • gnuplot & eps
    • mac
    • matplotlib
    • wordpress
  • ホーム・家電
    • アイロン
    • オーディオ
    • オーラルケア
      • ジェットウォッシャー
      • 音波振動歯ブラシ
    • カメラ
    • カー用品
    • クリーナー
    • テレビ、レコーダー
    • ドアホン
    • メンズ美容家電
      • ラムダッシュ
    • ルンバ
    • 一覧比較
    • 工具
    • 浄水器
    • 温水洗浄便座
    • 炊飯器
    • 空気清浄機・加除湿機
    • 空調・季節家電
    • 美容家電
      • フェイスケア
      • ヘアケア
      • ボディーケア
    • 血圧計
    • 調理器具
    • 電子レンジ
  • 健康
  • 家事
    • パン
    • 料理
    • 育児
    • 食品
      • おせち
      • コーヒー
  • 書籍
  • 知識
  • 趣味
    • ペン字
    • ロードバイク・クロスバイク
    • 車
    • 鉄道模型
    • 電子工作
サイト内検索
最近の投稿
  • モナークHGとモナークM7の4つの違い。[ニコン双眼鏡]
  • ニコン モナーク M7とM5の4つの違い。[双眼鏡]
  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
  • RZ-760、GT-760、ST-760の違い。[ガス缶・CB缶]
  • RZ-730、RZ-730S、RZ-730SBK、RZ-730SWH、ST-Y450の違い。
  • TC-EA35WとTC-E123SBKの違いを比較。[スティッククリーナー]
  1. ホーム
  2. コンピューター
  3. Chart.jsのパイチャートで、データ割合をパーセント表示する方法!
  • ホーム
  • プライバシーポリシー

© カタログクリップ
contact@beiznotes.org

目次