Chart.jsでグラフを描画した際に、グラフにカーソルを載せることで表示される詳細情報(ツールチップ)をパーセント表示にする方法です。
ネット上では幾つかサンプルが見つかるのですが、グラフの一部分のみパーセント表示にする方法が多く、目的とする操作ができなかったので備忘のため記事を残します。
パーセント表示にするために全体の合計値を取っている箇所(変数totalValue)の算出方法が見つからずに苦労しました。
optionsで設定しているcallbacksの中で、引数のtooltipItemとdataに対して、data.dataset[番号].data[tooltipItem.index]としている部分です。
var options = {
省略
tooltips: {
callbacks: {
label: function (tooltipItem, data){
var totalValue = 0;
/* データセットの数だけ繰り返し */
for (var i = 0; i < data.datasets.length; i++) {
/* 数値型でデータの数だけ加算してゆくことで合計値を取る */
totalValue += Number(data.datasets[i].data[tooltipItem.index]);
}
/* 説明のラベル:%表示(小数点下2桁):%にする前の値 */
return data.datasets[tooltipItem.datasetIndex].label
+ ": "
+ (data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] / totalValue * 100).toFixed(2)
+ " % : "
+ data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
}
}
}
};
以上。
