こんにちは。ウエディングドレスのクチコミサイト「Wedding Park DRESS」のチーフエンジニアをしているたかしま(@_at_tech)です。

最近はオーディション番組から誕生した推しのグループがデビューして嬉しい日々です🌹

今回はある案件でグラフを表示するためのライブラリ

  • Chart.js
  • Charts.css

を検討・活用したので、そこで知ったことをまとめてみようと思います。

サイト内でグラフの表示を考えている方の参考になれば嬉しいです。

Chart.js

https://www.chartjs.org/

https://www.chartjs.org/docs/latest/

概要

  • JavaScriptでグラフ(チャート)を描画するためのライブラリ
  • MITライセンスのため自由に扱うことができる
  • 公式サイトによると「JavaScript向けチャートライブラリの中で一番人気」

特徴

  • 様々なグラフをきれいに描画することができる
  • 比較的ドキュメントが充実している
  • カスタムプラグインを利用してカスタマイズすることができる
  • グラフが <canvas></canvas> として描画されるので、CSSを使った細かいデザイン調整ができなかった(もう一方のCharts.cssはここが得意)

基本的な記述形式(ドーナッツチャート)

プログラム

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<div>
<canvas id="myChart"></canvas>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'doughnut',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
<div> <canvas id="myChart"></canvas> </div> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> const ctx = document.getElementById('myChart'); new Chart(ctx, { type: 'doughnut', data: { labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], datasets: [{ label: '# of Votes', data: [12, 19, 3, 5, 2, 3], borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true } } } }); </script>
<div>
    <canvas id="myChart"></canvas>
</div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<script>
    const ctx = document.getElementById('myChart');

    new Chart(ctx, {
        type: 'doughnut',
        data: {
            labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
            datasets: [{
                label: '# of Votes',
                data: [12, 19, 3, 5, 2, 3],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
</script>

グラフ

設定したオプション・プラグインなど

カスタマイズするためのオプションは公式ドキュメントに記載されていますが、

思っていたより探すのに時間がかかってしまったので、つかったものを記載しておきます。

凡例の非表示

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Chart.overrides['doughnut'].plugins.legend.display = false;
...
new Chart(ctx, {
Chart.overrides['doughnut'].plugins.legend.display = false; ... new Chart(ctx, {
Chart.overrides['doughnut'].plugins.legend.display = false; 
...

new Chart(ctx, {

tooltipの非表示

オンマウスした時に表示されるこれを非表示にします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
options: {
...
plugins: {
tooltip: {
enabled: false,
},
}
}
options: { ... plugins: { tooltip: { enabled: false, }, } }
options: { 
    ... 
    plugins: {
        tooltip: { 
            enabled: false, 
        }, 
    }
}

グラフの値を表示

以下のプラグインを使うことで、グラフ状に値を表示することができます。

chartjs-plugin-datalabels

hover時の動きをなくす

オンマウスしたときに色が濃くなったりするのをなくします。(tooltipはこれでも消えます)

これはオプションではなく、cssで対象のグラフのクラスに以下を指定しました。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pointer-events: none;
pointer-events: none;
pointer-events: none;

Charts.css

https://chartscss.org/

概要

  • CSSでグラフを描画するためのライブラリ
  • MITライセンスのため自由に扱うことができる
  • 公式サイトによると「従来のJSチャートライブラリをCSSフレームワークで置き換える」

特徴

  • 現時点で正式対応しているのは棒/面/線グラフのみ
  • Chart.jsに比べてドキュメントが少なかった
  • グラフを <table></table> で表現するのでCSSをつかったデザイン調整ができる

基本的な記述形式

HTML

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/charts.css/dist/charts.min.css">
<table id="bar-example-1" class="charts-css bar">
<caption> Bar Example #1 </caption>
<tbody>
<tr>
<td style="--size: 0.2;"></td>
</tr>
<tr>
<td style="--size: 0.4;"></td>
</tr>
<tr>
<td style="--size: 0.6;"></td>
</tr>
<tr>
<td style="--size: 0.8;"></td>
</tr>
<tr>
<td style="--size: 1;"></td>
</tr>
</tbody>
</table>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/charts.css/dist/charts.min.css"> <table id="bar-example-1" class="charts-css bar"> <caption> Bar Example #1 </caption> <tbody> <tr> <td style="--size: 0.2;"></td> </tr> <tr> <td style="--size: 0.4;"></td> </tr> <tr> <td style="--size: 0.6;"></td> </tr> <tr> <td style="--size: 0.8;"></td> </tr> <tr> <td style="--size: 1;"></td> </tr> </tbody> </table>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/charts.css/dist/charts.min.css">

<table id="bar-example-1" class="charts-css bar">
    <caption> Bar Example #1 </caption>
    <tbody>
        <tr>
            <td style="--size: 0.2;"></td>
        </tr>
        <tr>
            <td style="--size: 0.4;"></td>
        </tr>
        <tr>
            <td style="--size: 0.6;"></td>
        </tr>
        <tr>
            <td style="--size: 0.8;"></td>
        </tr>
        <tr>
            <td style="--size: 1;"></td>
        </tr>
    </tbody>
</table>

CSS

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
#bar-example-1 {
height: 200px;
max-width: 300px;
margin: 0 auto;
}
body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; } #bar-example-1 { height: 200px; max-width: 300px; margin: 0 auto; }
body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
}

#bar-example-1 {
  height: 200px;
  max-width: 300px;
  margin: 0 auto;
}

グラフ

HTML要素にclassを付与してCSSをあてることで、かなり自由度高くデザインをカスタマイズできます!

おわりに

グラフを描画するためのライブラリ Chart.js, Charts.cssについて書いてみました。

わたしは、サイトに合うデザインのグラフをつくりたかったので、

棒グラフはCharts.cssでつくり、ドーナッツチャートはCharts.cssで正式版がなかったためChart.jsをつかいました。

それぞれの良さを活かしながら、活用していけたらと思います!

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る