「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
弊社では様々な分野のソフトウェア開発を行っておりますが、近年では開発したソフトウェアをパソコンだけでなくタブレットやスマホでも稼働させたいという要望も増えてきました。
そのため、ブラウザ上で動作することによって様々なデバイスで使用できるWebアプリケーションの開発も増えてきました。
過去にソフテックだより第415号『Webアプリケーション 〜グリッドライブラリを使用してみて〜』にてグリッドライブラリをご紹介しましたが、今回は、チャート(グラフ)ライブラリをご紹介したいと思います。
最近ではDX(デジタルトランスフォーメーション)が注目されており、様々な企業でビッグデータなどの大量のデータとデジタル技術を活用して、業務プロセスやビジネスモデルの変革を進めています。
そうした中で業務システムでも大量データを扱うことがありますが、データをグラフ化して表示したいといったことがよくあります。
ここでご紹介するのが『チャート(グラフ)ライブラリ』で、グラフ画面を簡単に実現できるライブラリです。
htmlで<canvas>タグを用いてグラフを表示するプログラムを作成することもできますが、チャート(グラフ)ライブラリを使用すればわずかなプログラムコードによってグラフ表示を作成することが可能です。
グリッドライブラリなど他ライブラリと同様に、チャート(グラフ)ライブラリも有償版・無償版含め様々なライブラリが販売・公開されています。
下記でご紹介するライブラリは、どれも基本的な機能は兼ね備えており一般的なグラフであれば簡単に実装可能です。
また、各ライブラリの公式HPではデモページが用意されており、実際の画面イメージを確認することができます。
※各グラフの対応状況は、バージョン等により異なる場合もありますので、詳細は公式サイトでの確認をお願いいたします。
※MITライセンス
著作権表示とMITライセンス全文を記載することを利用条件として、無償利用が可能なライセンス
※BSD 3-Clause License
ソフトウェアの使用、改変、再配布を許可するオープンソースライセンス。著作権表示の保持と、著作権者の名前を無断でプロモーションに使用しないことが条件です。
※Apache License 2.0
ソフトウェアの使用、改変、再配布を許可し、特許ライセンスも提供する寛容なオープンソースライセンス。著作権表示とライセンス条項の保持が必要で、商標の使用には制限があります。
[参考]
各ライブラリ公式サイト
いくつかチャート(グラフ)ライブラリをご紹介しましたが、ライブラリは複数存在します。
そのため、その中で用途に合ったライブラリを選定することになりますが、筆者が考える選定を行う際のポイントについて説明します。
チャート(グラフ)ライブラリを使用する場合、大前提として表示したいグラフ種類に対応している必要があります。
一般的な棒グラフ/折れ線グラフ/円グラフくらいであれば、ほとんどのライブラリが対応していますが、 使用頻度が少ないグラフの場合はライブラリによって対応状況が異なりますので事前確認が必須です。
表示したグラフデータをユーザーがどのような視点で見たいか?によりますが、よくある要望として次のような機能があります。 機能を兼ね備えているかはライブラリによって様々ですので、グラフを表示できるかだけでなく、 ユーザーがどのような操作をするか?その操作に関する機能を持っているか?はライブラリ選定時には確認しておいた方がよいポイントかと思います。
当然と言えば当然ですが、大量データを扱う場合はチャート(グラフ)のデータ数に応じて表示速度も遅くなってきます。
特に収集したデータをリアルタイムで表示したいといった場合などは、表示速度も重要な部分となってきます。
また、HTMLにチャート(グラフ)を表示する方法は、Canvasを使用する方法とSVGを使用する方法があり、
それぞれ次のような特徴がありますので、各ライブラリがどちらの方法を採用しているか確認しておくのがよいです。
まとめると、Canvasは高速な描画で大量のデータポイントやリアルタイム更新が求められる場合に向いていて、 SVGは解像度に依存しない拡大・縮小を行いたい場合、CSSやJavaScriptで見た目をカスタマイズしたい場合に向いています。
なお、どちらにしても極端にデータが多い場合はどうしても処理時間はかかりますので、 全てのデータを表示するのではなく数点ずつ表示とする、間引き表示の機能があるライブラリを選定するというのも1つの方法かと思います。
グリッドライブラリをご紹介した際にも挙げましたが、
ライブラリを使用する際はそのライブラリの使用方法を理解するためには取扱説明書・公式HPなどのドキュメントが必要になってきます。
通常、プログラムを作成する上ではライブラリの関数、プロパティ、イベントの情報が必要になると思いますが、
説明と共にサンプルコード、実際の画面イメージなどが記載されていると理解しやすいため、
公式ドキュメントに限らず、対象のライブラリの紹介ページなども含めドキュメントが豊富か?も選定する際の1つの判断材料としてよいのではないかと思います。
なお、最近では生成AIも普及してきており、ちょっとした使い方くらいであればAIにサンプルを作成してもらうというのも有効です。
ご紹介しましたようにチャート(グラフ)ライブラリは色々ありますが、『Chart.js』の使い方についてご紹介したいと思います。 日本ではチャート(グラフ)ライブラリと言えば『Chart.js』というくらい定番のライブラリです。
Chart.jsを使用するにあたり、JavaScriptが必要となります。
使用する環境によりますが、npmやNuGetでのインストールを行い、JavaScriptファイルの読み込みを行います。
また、インターネット接続可能であれば、CDNを介して下記のようにJavaScriptを取得することも可能です。
■JavaScript
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
チャート(グラフ)を表示するタグとして<canvas>タグを用意します。
■Html
<canvas id="chart"></canvas>
スクリプトにてChartをnewして作成する際に、<canvas>タグのエレメントオブジェクトを第一引数に渡すことで、指定した<canvas>タグにチャート(グラフ)が表示されます。第二引数にはグラフ種類や表示に関するオプションを指定することが可能です。
■JavaScript
// 表示データセット
var data = {
labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], // X軸のラベル
datasets: [{
label: '平均気温 (℃)', // データセットのラベル
data: [5, 6, 9, 14, 18, 22, 25, 27, 23, 17, 11, 6], // データポイント
borderColor: 'rgba(75, 192, 192, 1)', // 線の色
}]
};
// グラフ表示オプション
var options = {
scales: {
x: {
beginAtZero: false // X軸の開始点を0にしない
},
y: {
beginAtZero: true // Y軸の開始点を0にする
}
}
};
// canvasのコンテキスト取得
const ctx = document.getElementById('chart').getContext('2d');
// 折れ線グラフ表示
const LineChart = new Chart(ctx, {
type: 'line', // グラフの種類
data: data, // 表示データセット
options: options, // グラフ表示オプション
});
実際に上記をWebブラウザ上で表示してみると下記のように折れ線グラフの画面が表示されます。
折れ線グラフ以外にChart.jsではグラフを作成する際にChartをnewして作成する際に、typeにグラフ種類を指定することで様々なグラフを表示することが可能です。
■JavaScript(棒グラフ例)
// 表示データセット
var data = {
labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
datasets: [{
label: '月別売上', // データセットのラベル
data: [120, 150, 180, 200, 170, 190, 220, 240, 210, 230, 250, 270], // データポイント
backgroundColor: 'rgba(75, 192, 192, 0.2)', // 棒グラフの背景色
borderColor: 'rgba(75, 192, 192, 1)', // 線の色
borderWidth: 1 // 線の幅
}]
};
// グラフ表示オプション
var options = {
responsive: true, // レスポンシブ対応 有効化
plugins: {
tooltip: {
enabled: true // ツールチップ 有効化
}
}
};
// canvasのコンテキスト取得
var ctx = document.getElementById('chart').getContext('2d');
// 棒グラフ表示
var BarChart = new Chart(ctx, {
type: 'bar', // グラフの種類
data: data, // 表示データセット
options: options, // グラフ表示オプション
});
■JavaScript(円(ドーナツ)グラフ例)
// 表示データセット
var data = {
labels: ['売上1', '売上2', '売上3'],
datasets: [{
data: [30, 50, 20], // データポイント
backgroundColor: ['rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)'], // 円グラフの背景色
borderColor: ['rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)'] // 線の色
}]
};
// グラフ表示オプション
var options = {
plugins: {
legend: {
position: 'top', // 凡例の位置を上部に設定
},
tooltip: {
enabled: true // ツールチップ 有効化
}
}
};
// canvasのコンテキスト取得
var ctx = document.getElementById('chart').getContext('2d');
// 円(ドーナツ)グラフ表示
var myDoughnutChart = new Chart(ctx, {
type: 'doughnut', // グラフの種類
data: data, // 表示データセット
options: options, // グラフ表示オプション
});
Chart.jsでは基本的なオプション以外に、プラグインという形で機能を拡張できる方法が用意されています。
例えば下記のように『chartjs-plugin-zoom』を使用してズーム機能を有効化するとマウスホイール操作にて拡大・縮小、ドラッグ操作にてグラフの移動が可能となります。
■JavaScript(必要パッケージ)
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-zoom/2.2.0/chartjs-plugin-zoom.min.js"></script>
■Html
<!-- リセットボタン -->
<button id="zoom-reset" onclick="zoomResetFunc()">リセット</button>
<!-- グラフ表示canvas -->
<canvas id="chart" width="400" height="200"></canvas>
■JavaScript(ズームプラグイン 有効化)
// 表示データセット
var data = {
labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月', '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
datasets: [{
label: '平均気温(℃)',
data: [5, 6, 9, 14, 18, 22, 25, 27, 23, 17, 11, 6, 5, 6, 9, 14, 18, 22, 25, 27, 23, 17, 11, 6],
borderColor: 'rgba(75, 192, 192, 1)',
}]
};
// グラフ表示オプション
var options = {
plugins: {
zoom: {
pan: {
enabled: true,
mode: "y" // Y軸でパン 有効化
},
zoom: {
wheel: {
enabled: true, // マウスホイール操作でのズーム 有効化
},
pinch: {
enabled: true // ピンチ操作でのズーム 有効化
},
mode: 'y', // Y軸でズーム 有効化
}
}
}
};
// canvasのコンテキスト取得
const ctx = document.getElementById('chart').getContext('2d');
// 折れ線グラフ表示(ズーム機能有効化)
const LineChart = new Chart(ctx, {
type: 'line', // グラフの種類
data: data, // 表示データセット
options: options, // グラフ表示オプション
});
// リセットボタン クリックイベントハンドラ
function zoomResetFunc() {
LineChart.resetZoom();
}
いかがでしたでしょうか? 今回はチャート(グラフ)ライブラリについてご紹介しました。
使用例としては『Chart.js』をご紹介しましたが、一般的なグラフであればどのライブラリでも基本的な使用方法は似ていて、
使い方はそう難しくはありませんのでライブラリの使用を検討してみてもよいのではないかと思います。
また、チャート(グラフ)ライブラリに限らず以前に比べて便利なライブラリはかなり増えていますので、良いライブラリがあればまた別の機会にご紹介できればと思います。
(Y.R.)
関連ページへのリンク
関連するソフテックだより