デフォルトでは、ハイチャートはツールチップにラインマーカーシンボルを表示します。
$(function () {
$('#container').highcharts({
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}, {
data: [194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4]
}]
});
});
http://jsfiddle.net/sashi799/vsyfmu77/
ツールチップフォーマッタを使用して、ラインマーカーシンボルを追加するにはどうすればよいですか?
$(function () {
$('#container').highcharts({
tooltip: {
formatter: function () {
return this.x+'<br/>'+this.series.name+': '+this.y;
}
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}, {
data: [194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4]
}]
});
});
http://jsfiddle.net/sashi799/zrhaokrn/
デフォルトのシナリオのように、フォーマッターからシリーズ名の前に円記号を追加したいと思います。
私は自分の答えをここに投稿します Kacper Madejの答え ここでは実際には質問に答えていません。これは、Highchartsが使用する5つの異なるシンボルを同じツールチップに配置するだけです。
この回答は複数の色を使用している場合は機能しますが、すべてのシリーズが同じ色である場合は完全に失敗します。それらをまったく表示しないこともできます。
Highchartsは、symbolName
オブジェクト自体のプロパティ自体であるgraphic
オブジェクト内のpoint
プロパティを公開します。使用する形状は次のとおりです。
"circle"
_●"diamond"
_♦"square"
_■"triangle"
_▲"triangle-down"
_▼この情報を使用して、tooltip.formatter()
関数内でswitch
ステートメントを作成し、関連するシンボルをHighchartsが公開するシンボル名にマップすることができます。
_var symbol;
switch ( this.point.graphic.symbolName ) {
case 'circle':
symbol = '●';
break;
case 'diamond':
symbol = '♦';
break;
case 'square':
symbol = '■';
break;
case 'triangle':
symbol = '▲';
break;
case 'triangle-down':
symbol = '▼';
break;
}
_
次に、symbol
変数を参照して、ツールチップ内にシンボルを配置できます。
_return this.x + '<br/>' + symbol + ' ' + this.series.name + ': ' + this.y;
_
次に、これをポイントの色に拡張して、シリーズの色と一致させることができます。これは単に、symbol
を_<span>
_要素でラップし、style
にシリーズの色を設定することを含みます。これにより、Highchartsが_this.series.color
_を介して提供します。
_'<span style="color:' + this.series.color + '">' + symbol + '</span>';
_
ただし、これを運用に移す前に、graphic
オブジェクトもsymbolName
プロパティもまったく持たないポイントのツールチップが表示される場合があることに注意してください。これは、グラフの表示範囲外にポイントが存在する場合に発生する可能性があります。線の上にカーソルを置くとツールチップが表示されますが、ポイント自体は表示されないため、グラフィック関連のプロパティは必要ありません。
JavaScriptエラーを防ぐには、switch
ステートメントを次のif
句でラップする必要があります。
_if ( this.point.graphic && this.point.graphic.symbolName )
_
これにより、最初にsymbol
変数を空の文字列(_''
_)として定義して、ツールチップにndefinedとして表示されないようにすることもできます。
_var symbol = '';
_
この例では、次の画像を使用しました:
この解決策はこの質問に対してうまく機能しますが、カスタムマーカー画像を処理するときに落ちることは注目に値します-これらが使用される場合、graphic
オブジェクトまたはsymbolName
プロパティはなく、独自の画像を使用しているため、とにかく上の図形を表示したい。
まず、ツールチップ内でHTMLを使用することをHighchartsに伝えます。これを行うには、tooltip
オブジェクトで_useHTML: true
_を指定します。
_tooltip: {
formatter: function() { ... },
useHTML: true
}
_
幸い、HighchartsのツールチップはHTMLの_<img />
_要素をサポートしており、_this.point.marker.symbol
_を使用してsymbol
オブジェクト内のmarker
プロパティを通じてカスタム画像のURLを取得できます。
_this.point.marker.symbol
-> "url(http://i.imgur.com/UZHiQFQ.png)"
_
2番目のハードルは、実際の画像URLを囲んでいる_url(
_および_)
_を削除することです。このために、正規表現を使用して、削除するビットを照合できます。私が使用した正規表現は/^url\(|\)$/g
で、次のように視覚化されます。
最後のg
は、一致をプルすることを示しているので、_url(
_と_)
_の両方を1回の不正な方法で置き換えることができます。
_var url = this.point.marker.symbol.replace(/^url\(|\)$/g, '');
-> "http://i.imgur.com/UZHiQFQ.png"
_
次に、これを_<img />
_要素に配置し、symbol
変数に格納します。
_symbol = '<img src="' + url + '" alt="Marker" />';
_
最後にmarker
オブジェクトとsymbol
プロパティが存在することを確認します。私は、これを_else if
_として、シンボルの存在を確認するで宣言されている元のif
ステートメントに加えて、次のように選択しました。
_if ( this.point.graphic && this.point.graphic.symbolName ) { ) { ... }
else if ( this.point.marker && this.point.marker.symbol ) { ... }
_
私はこれが古いスレッドであることを確認できますが、Highcharts APIはいくつかの点で異なるようですので、元の投稿からここで更新を提供しています。
私はHighcharts JS v4.2.6(2016-08-02)(highcharts-ng 0.0.12と共に)を使用していて、this.point.graphic.symbolName
プロパティにアクセスして実装することができませんでした James Donnelly's =ソリューション-代わりに、this.series.symbol
にアクセスするように変更する必要がありました。
switchステートメントに表示されるシンボルは、それらの TF-8 Geometric Shapesコード からレンダリングされているため、switchステートメントを次のように構成する必要がありますsymbol = 'charactercodegoeshere';
。(例:記号= '&#9679';円記号の場合)
次のコードは、特定のシリーズのチャートのツールチップで正しいシンボルを正しい色で最終的にレンダリングしました。
tooltip: {
style: {
padding: 10,
fontWeight: 'bold'
},
useHTML: true,
formatter: function () {
var symbol;
switch ( this.series.symbol ) {
case 'circle':
symbol = '●';
break;
case 'diamond':
symbol = '◆';
break;
case 'square':
symbol = '■';
break;
case 'triangle':
symbol = '▲';
break;
case 'triangle-down':
symbol = '▼';
break;
}
return Highcharts.dateFormat('%B %Y', this.x) + '<br/>' + '<span style="color:' + this.series.color + '; font-size: 1.5em;">' + symbol + '</span> ' + this.series.name + ': ' + this.y;
}
}
Highcharts.dateFormat()メソッドを使用して、エポックミリ秒のタイムスタンプを表示用にフォーマットしました。
次のように実行できます: http://jsfiddle.net/fspzj4xw/
tooltip: {
formatter: function () {
var s = '<b>' + this.x + '</b>';
$.each(this.points, function () {
s += '<br/>' + '<span style="color:' + this.series.color + '"> ●♦▲▼■ </span>' + ' ' + this.series.name + ': ' + this.y + 'm';
});
return s;
},
shared: true
},
軽量なソリューションは、Series afterInit
イベントにフックしてシンボルを追加することです:
Highcharts.addEvent(Highcharts.Series, 'afterInit', function() {
this.symbolUnicode = {
circle: '●',
diamond: '♦',
square: '■',
triangle: '▲',
'triangle-down': '▼'
}[this.symbol] || '●';
});
ライブデモを見る: http://jsfiddle.net/pjqz79pv/1/