【JavaScript】Chart.jsのズーム時に最小値を常に固定するには
Chart.jsは、chartjs-plugin-zoomを組み合わせることによって、グラフのズームやパン操作を実現できます。マウスのホイールを回転させてズームさせると、マウスカーソルを中心とした位置でズームされて最大値と最小値も変化します。
分光スペクトルやクロマトグラムのようなグラフでは、ベースライン付近のピークを確認するために拡大することもあり、その際にY軸(強度)の最小値を0に固定したいときがあります。これをchartjs-plugin-zoomで実現する方法についてまとめてみました。
chartjs-plugin-zoomの機能を使って、ズーム時の最小値を固定する例はこちらのエントリーを参照。
Chart.js自体の使い方はこちらのエントリーを参照。
Reactでの使い方はこちらのエントリーを参照。
コールバック関数の設定
chartjs-plugin-zoomでは、ズーム時、パン操作時にイベントが発生します。この時、用意されているイベントのプロパティにコールバック関数を設定しておくことで、コールバック関数が呼び出されます。
ズーム操作のイベント
ズーム操作のイベントプロパティをoptions.plugins.zoom.zoom
に設定します。コールバック関数の引数は決まっているので、公式ドキュメントを確認してください。
プロパティ | 呼び出されるタイミング |
---|---|
onZoom | ズーム操作中 |
onZoomStart | ズーム操作の開始時 |
onZoomCompleted | ズーム操作の終了時 |
onZoomRejected | ズーム操作の失敗時 |
最後のonZoomRejected
は、修飾キーが設定されている(options.plugins.zoom.zoom.wheel.modifierKey
に値が設定されている)場合に、そのキーが離された時に呼び出されるイベントです。
最小値の固定方法
ズーム操作中に最小値を固定するには、onZoom
プロパティにコールバック関数を設定するだけです。この中で、chart.config.options.scales.y.min
に0
を設定します。設定後、再描画のためにchart.update()
を呼び出す必要があります。
この時グラフが再描画されるため、アニメーションが有効になっていると毎回アニメーションが入ります。そのため不自然な表示となってしまいます。対策として、update()
の前で一度アニメーションをOFFにし、update()
後に設定を復帰させておきます。
onZoomに設定するコールバック関数の例を以下に示します。
onZoom: ({chart}) => {
const animation = chart.config.options.animation;
// アニメーションを一時OFFにする
chart.config.options.animation = false;
// Y軸の最小値を0にする
chart.config.options.scales.y.min = 0;
// 画面を更新する
chart.update();
// アニメーションの設定を元に戻す
chart.config.options.animation = animation;
},
実際の使用例
前エントリで作成した例にonZoom
プロパティを追加してみました。Y軸上でマウスのホイールを回すとズームしますが、最小値が常に0に固定されていることがわかります。
See the Pen
Y軸の最小値を0で固定する by Izadori (@izadori)
on CodePen.
ディスカッション
コメント一覧
まだ、コメントがありません