あぁぁぁWebアプリ上にダッシュボード作りてぇぇぇという気分になったのでChart.jsを触ってみることにしました。カスタマイズも少し試してみていますので良ければ参考にしてみてください。
「Chart.js」とはその名の通りデータを可視化する際に用いられるJavaScriptのライブラリで、Bar(棒グラフ)、Line(線グラフ)、Pie(円グラフ)、Radar(レーダーチャート)、Scatter(散布図)、Bubble(バブルチャート)等が描画可能です。
描画のためのライブラリなのに文字での長ったらしい説明はうんざりですよね、なので早速グラフを作ってみましょう。今回はNext.js上での利用想定しているので、事前に以下の通り必要なライブラリをインストールしましょう。
npm i chart.js
npm i react-chartjs-2
まずは適当に用意した同じデータからBar・Line・Radarチャートを作ってみました。実際に描画できたチャートとそのコードは以下の通りです。ご覧の通り左上がBar、左下がLine、右半分がRadarです。
Chart.register()
内にはスケールや凡例等の必要なコンポーネントのみを登録することでパフォーマンス向上に努める方が良しとされますが、今回は面倒なので登録可能なコンポーネントを全部登録してしまいます。そのために、registerables
を使用します。なおregisterable内にはさまざまなコンポーネントが配列形式で用意されているため、「スプレッド構文」(...
)を利用しないとエラーが出るのでご注意を。datasets
という変数に格納します。ここでは各データに対してAさん-Cさんという名称でラベルを付与しています。9行目のlabels
とはもちろん別物なのでご注意ください。firstChart
という変数に格納します。<"チャート種類" />
に、それぞれのチャート種類を入力します。続いて応用編です。今度はオプション(options
)を利用することで、より複雑なグラフを描画してみましょう。ここでは以下のことをやってみようと思います。
実際のグラフはBarだけLineだけというよりそれらを組み合わせたものが用いられることが多いと思います。今回はBar・Lineを組み合わせて描画します。
現状のカラーパレットも良いとは思いますが、Webページ全体の構成を考えると調整したい場合もあると思うので、今回はカラースペースというツールを利用させていただきましてカラーパレットもカスタマイズしていきます。使い方は簡単で、好きな色を選んで"Generate"ボタンを押すだけです。すると画面下部に様々な色の組み合わせが生成されるのですが、今回は"Generic Gradient"というカラーパレットを利用させていただきましょう。
使ってみる。(基本)で作成したグラフでは、各プロットにカーソルを合わせないと正確な数値が出ませんがそれだと見づらいですよね。今回はそれを改善します。
グラフの各要素上にその数値を表示させます。データラベルを表示させるにはプラグインを利用する必要があるため、chartjs-plugin-datalabels
というプラグインを予めインストールしておきます。
npm install chartjs-plugin-datalabels
では上記ポイントを踏まえてグラフを描画していきましょう。
ChartDataLabels
プラグインもインポートしておきましょう。registerable
を登録します。また、4行目でインポートしたChartDataLabels
プラグインについては7行目の通り別途登録する必要があります。colorPalette1
に格納します。datasets
という変数に格納します。label
とdata
は基本と同じですが、その後に続く部分は新しく追加となったので説明します。type
ではグラフの種類を指定できます。他にも"pie"
というものが利用可能です。backgroundColor
とborderColor
はそれぞれBarとLineに指定しています。order
は必須ではないですが、重なったデータの重なり順を指定可能です。番号は低いほど前に表示されます。options
)を操作します。これにはいくつかの値を設定できますが、今回はplugins
とinteraction
の内容を修正していきます。37-39行目では凡例legend
の表示位置を指定しています。デフォルトでは"top"
です。40-43行目ではチャートのタイトルtitle
を表示させています。44-53行目ではインポートしたChartDataLabels
プラグインを利用してデータラベルdatalabels
について指定しています。45行目ではcolor
としてラベルの色を指定します。46-47行目ではラベルの表示位置を調整しています。align
ではラベルを基準点から見てどこに表示するか、anchor
ではその基準点をどこに置くかを設定します。それぞれcontext.dataset.type
を含む条件式を書いていますが、ここのtype
というのが28-32行目で設定しているグラフの形を参照させています。48-51行目ではラベルのフォントについて設定しています。また今回は使用していませんが、formatter
というパラメータを利用するとラベル上に各ラベルに"kg"というような単位を設定することができるので便利です。続いてinteraction
側の設定です。interaction
ではグラフに対してホバーやクリック等のマウス操作を実施した場合の挙動を設定できます。今回はツールチップのホバー設定を変更します。55行目でmode
を"index"
とすることでx軸に並ぶ全データセットのデータポイントを同時にホバーすることができます。56行目でintersect
をfalse
とすることで、ポイントの上にカーソルがなくてもツールチップを表示させることができます。secondChart
という変数に格納します。<"チャート種類" />
にsecondChart
を入力した上でoptions
を指定します。Chart.jsを使えば本格的なグラフの描画が可能なことが分かりました。またMUIでも似たようなグラフの描画が可能なようなのでいつか試してみたいと思います。
よろしければこちらの記事も参考にしてみてください。
Loading...