ツールチップ
ツールチップ設定
ツールチップの設定は options.tooltips
名前空間に渡します。チャートツールチップのグローバルオプションは Chart.defaults.global.tooltips
で定義されています。
名前 | 型 | 初期値 | 説明 |
---|---|---|---|
enabled |
Boolean |
true |
キャンバス上でツールチップを有効にします。 |
custom |
Function |
null |
カスタムツールチップセクションを参照してください。 |
mode |
String |
'nearest' |
ツールチップにどの要素が表示されるかを設定します。 詳細... |
intersect |
Boolean |
true |
trueの場合、ツールチップモードmode は、マウスの位置が要素と交差する場合にのみ適用されます。 falseの場合、モードは常に適用されます。 |
position |
String |
'average' |
ツールチップを配置するモード。 詳細... |
callbacks |
Object |
コールバックの項を参照してください。 | |
itemSort |
Function |
ツールチップ項目をソートします。詳細... | |
filter |
Function |
フィルタツールチップの項目。 詳細... | |
backgroundColor |
Color |
'rgba(0,0,0,0.8)' |
ツールチップの背景色。 |
titleFontFamily |
String |
"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" |
タイトルフォント。 |
titleFontSize |
Number |
12 |
タイトルフォントサイズ。 |
titleFontStyle |
String |
'bold' |
タイトルフォントスタイル。 |
titleFontColor |
Color |
'#fff' |
タイトルフォントの色。 |
titleSpacing |
Number |
2 |
各タイトル行の上部と下部に追加する間隔。 |
titleMarginBottom |
Number |
6 |
タイトルセクションの下部に追加する余白。 |
bodyFontFamily |
String |
"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" |
本文フォント。 |
bodyFontSize |
Number |
12 |
本文フォントサイズ。 |
bodyFontStyle |
String |
'normal' |
本文フォントスタイル。 |
bodyFontColor |
Color |
'#fff' |
本文フォントの色。 |
bodySpacing |
Number |
2 |
各ツールチップアイテムの上部と下部に追加する間隔。 |
footerFontFamily |
String |
"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" |
フッタフォント。 |
footerFontSize |
Number |
12 |
フッターのフォントサイズ。 |
footerFontStyle |
String |
'bold' |
フッターフォントスタイル。 |
footerFontColor |
Color |
'#fff' |
フッターフォントの色。 |
footerSpacing |
Number |
2 |
各フッター行の上端と下端に追加する間隔。 |
footerMarginTop |
Number |
6 |
フッターを描画する前に追加する余白。 |
xPadding |
Number |
6 |
ツールチップの左右に追加するパディング。 |
yPadding |
Number |
6 |
ツールチップの上下に追加するパディング。 |
caretPadding |
Number |
2 |
ツールチップの矢印の終点をツールチップポイントから離すために割り増す距離。 |
caretSize |
Number |
5 |
ツールチップの矢印のサイズ(ピクセル単位)。 |
cornerRadius |
Number |
6 |
ツールチップコーナーカーブの半径。 |
multiKeyBackground |
Color |
'#fff' |
複数の項目がツールチップに含まれている場合にカラーボックス(訳注: 凡例テキスト横に表示される四角)の背景に塗る色。 |
displayColors |
Boolean |
true |
trueの場合、カラーボックスがツールチップに表示されます。 |
borderColor |
Color |
'rgba(0,0,0,0)' |
枠線の色。 |
borderWidth |
Number |
0 |
枠線の太さ。 |
位置モード
設定可能なモードposition
は次のとおりです。
- 'average'
- 'nearest'
'average' モードでは、ツールチップを、ツールチップに表示されるアイテムの平均位置に置きます。 'nearest'では、イベントの位置に最も近い要素の位置にツールチップを配置します。
新しいモードは、関数をChart.Tooltip.positionersマップに追加することで定義できます。
例:
/**
* カスタム positioner
* @function Chart.Tooltip.positioners.custom
* @param elements {Chart.Element[]} ツールチップの要素
* @param eventPosition {Point} キャンバス座標のイベントの位置
* @returns {Point} ツールチップの位置
*/
Chart.Tooltip.positioners.custom = function(elements, eventPosition) {
/** @type {Chart.Tooltip} */
var tooltip = this;
/* ... */
return {
x: 0,
y: 0
};
}
ソートコールバック
ツールチップアイテムのソートを許可します。少なくとも Array.prototype.sortに渡すことができる関数を実装する必要があります。この関数は、チャートに渡されるデータオブジェクトを3番目のパラメータとして受け取ることもできます。
フィルタコールバック
ツールチップアイテムのフィルタリングを許可します。少なくともArray.prototype.filterに渡すことができる関数を実装する必要があります。この関数は、グラフに渡されるデータオブジェクトを2番目のパラメータとして受け取ることもできます。
ツールチップコールバック
ツールチップのラベル設定は、callbacks
キーを使用してツールチップ設定の下にネストされます。 ツールチップには、テキストを提供するための以下のコールバックがあります。すべての関数で、'this'はChart.Tooltipコンストラクタから作成されたツールチップオブジェクトになります。
すべての関数は、同じ引数で呼び出されます。つまり、ツールチップアイテムと、チャートに渡されるデータオブジェクトです。すべての関数は、文字列または文字列の配列のいずれかを返す必要があります。文字列の配列は、複数行のテキストとして扱われます。
名前 | 引数 | 説明 |
---|---|---|
beforeTitle |
Array[tooltipItem], data |
タイトルの前にレンダリングするテキストを返します。 |
title |
Array[tooltipItem], data |
ツールチップのタイトルとしてレンダリングするテキストを返します。 |
afterTitle |
Array[tooltipItem], data |
タイトルの後にレンダリングするテキストを返します。 |
beforeBody |
Array[tooltipItem], data |
本文セクションの前にレンダリングするテキストを返します。 |
beforeLabel |
tooltipItem, data |
個々のラベルの前にレンダリングするテキストを返します。これは、ツールチップの各項目に対して呼び出されます。 |
label |
tooltipItem, data |
ツールチップ内の個々の項目に対してレンダリングするテキストを返します。 |
labelColor |
tooltipItem, chart |
ツールチップの項目に対してレンダリングする色を返します。 詳細... |
labelTextColor |
tooltipItem, chart |
ツールチップ項目のラベルのテキストの色を返します。 |
afterLabel |
tooltipItem, data |
個々のラベルの後にレンダリングするテキストを返します。 |
afterBody |
Array[tooltipItem], data |
本文セクションの後にレンダリングするテキストを返します。 |
beforeFooter |
Array[tooltipItem], data |
フッターセクションの前にレンダリングするテキストを返します。 |
footer |
Array[tooltipItem], data |
ツールチップのフッターとしてレンダリングするテキストを返します。 |
afterFooter |
Array[tooltipItem], data |
フッターセクションの後にレンダリングするテキストを返します。 |
ラベルカラーコールバック
たとえば、ツールチップの各項目に対し赤いボックスを返すには、次のようにします。
var chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
tooltips: {
callbacks: {
labelColor: function(tooltipItem, chart) {
return {
borderColor: 'rgb(255, 0, 0)',
backgroundColor: 'rgb(255, 0, 0)'
}
},
labelTextColor:function(tooltipItem, chart){
return '#543453';
}
}
}
}
});
ツールチップアイテムインタフェース
ツールチップコールバックに渡すツールチップアイテムには、次のインターフェイスを実装します。
{
// ツールチップのX値を文字列で
xLabel: String,
// ツールチップのY値を文字列で
yLabel: String,
// 項目が属するデータセットのインデックス
datasetIndex: Number,
// データ項目のデータセット中でのインデックス
index: Number,
// マッチングポイントのX位置
x: Number,
// マッチングポイントのY位置
y: Number,
}
外部カスタムツールチップ
カスタムツールチップを使用すると、ツールチップのレンダリングプロセスをフックすることができ、独自の方法でツールチップをレンダリングできます。一般的に、これはキャンバス上のツールチップではなくHTMLツールチップを作成するために使用されます。カスタムツールチップをグローバル設定またはチャートの設定で有効にするには、次のようにします。
var myPieChart = new Chart(ctx, {
type: 'pie',
data: data,
options: {
tooltips: {
// キャンバス上のツールチップを無効にする
enabled: false,
custom: function(tooltipModel) {
// ツールチップ要素
var tooltipEl = document.getElementById('chartjs-tooltip');
// 最初のレンダリング時に要素を作成する
if (!tooltipEl) {
tooltipEl = document.createElement('div');
tooltipEl.id = 'chartjs-tooltip';
tooltipEl.innerHTML = "<table></table>";
document.body.appendChild(tooltipEl);
}
// ツールチップがない場合は非表示にします
if (tooltipModel.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
}
// キャレット(ツールチップが指し示すもの)の位置を設定する
tooltipEl.classList.remove('above', 'below', 'no-transform');
if (tooltipModel.yAlign) {
tooltipEl.classList.add(tooltipModel.yAlign);
} else {
tooltipEl.classList.add('no-transform');
}
function getBody(bodyItem) {
return bodyItem.lines;
}
// テキストを設定する
if (tooltipModel.body) {
var titleLines = tooltipModel.title || [];
var bodyLines = tooltipModel.body.map(getBody);
var innerHtml = '<thead>';
titleLines.forEach(function(title) {
innerHtml += '<tr><th>' + title + '</th></tr>';
});
innerHtml += '</thead><tbody>';
bodyLines.forEach(function(body, i) {
var colors = tooltipModel.labelColors[i];
var style = 'background:' + colors.backgroundColor;
style += '; border-color:' + colors.borderColor;
style += '; border-width: 2px';
var span = '<span style="' + style + '"></span>';
innerHtml += '<tr><td>' + span + body + '</td></tr>';
});
innerHtml += '</tbody>';
var tableRoot = tooltipEl.querySelector('table');
tableRoot.innerHTML = innerHtml;
}
// `this` はツールチップ全体です
var position = this._chart.canvas.getBoundingClientRect();
// 表示、配置、およびフォントスタイルの設定
tooltipEl.style.opacity = 1;
tooltipEl.style.position = 'absolute';
tooltipEl.style.left = position.left + window.pageXOffset + tooltipModel.caretX + 'px';
tooltipEl.style.top = position.top + window.pageYOffset + tooltipModel.caretY + 'px';
tooltipEl.style.fontFamily = tooltipModel._bodyFontFamily;
tooltipEl.style.fontSize = tooltipModel.bodyFontSize;
tooltipEl.style.fontStyle = tooltipModel._bodyFontStyle;
tooltipEl.style.padding = tooltipModel.yPadding + 'px ' + tooltipModel.xPadding + 'px';
tooltipEl.style.pointerEvents = 'none';
}
}
}
});
カスタムツールチップを使用してみる場合は、例としてsamplesを参照してください。
ツールチップモデル
ツールチップモデルtooltipModel
には、ツールチップのレンダリングに使用できるパラメータが含まれています。
{
// ツールチップ内にレンダリングしているアイテム。 「ツールチップアイテムインターフェイス」セクションを参照してください。
dataPoints: TooltipItem[],
// 位置
xPadding: Number,
yPadding: Number,
xAlign: String,
yAlign: String,
// X の Y のプロパティはツールチップの左上を指します
x: Number,
y: Number,
width: Number,
height: Number,
// ツールチップが指し示す場所
caretX: Number,
caretY: Number,
// 本文
// レンダリングが必要な本文
// 各オブジェクトは 3つのパラメータを持ちます
// before: String[] // 色の正方形(color square)の行の前のテキスト行
// lines: String[], // 色の正方形とともに主項目としてレンダリングするテキスト行
// after: String[], // 主項目の後にレンダリングするテキスト行
body: Object[],
// タイトルの後、本文の前に現れるテキストの行
beforeBody: String[],
// 本文の後ろかつ、フッターの前に現れるテキストの行
afterBody: String[],
bodyFontColor: Color,
_bodyFontFamily: String,
_bodyFontStyle: String,
_bodyAlign: String,
bodyFontSize: Number,
bodySpacing: Number,
// タイトル
// タイトルを構成するテキストの行
title: String[],
titleFontColor: Color,
_titleFontFamily: String,
_titleFontStyle: String,
titleFontSize: Number,
_titleAlign: String,
titleSpacing: Number,
titleMarginBottom: Number,
// フッター
// フッターを構成するテキストの行
footer: String[],
footerFontColor: Color,
_footerFontFamily: String,
_footerFontStyle: String,
footerFontSize: Number,
_footerAlign: String,
footerSpacing: Number,
footerMarginTop: Number,
// 外観
caretSize: Number,
cornerRadius: Number,
backgroundColor: Color,
// body[]内の各項目にレンダリングする色。これはツールチップの四角形の色です
labelColors: Color[],
// opacity 0 でツールチップは非表示
opacity: Number,
legendColorBackground: Color,
displayColors: Boolean,
}