Par défaut, les graphiques en hauteur affichent le symbole de repère de ligne dans l'info-bulle.
$(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/
Comment utiliser le formateur d’infos, comment ajouter le symbole de marqueur de ligne?
$(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/
Je souhaite ajouter le symbole de cercle devant le nom de la série du formateur, comme dans le scénario par défaut.
Je poste ici ma propre réponse en tant que La réponse de Kacper Madej ici ne répond pas du tout à la question, elle place simplement les 5 symboles différents utilisés par Highcharts dans la même info-bulle:
Cette réponse fonctionne si nous utilisons plusieurs couleurs, mais elle échouerait complètement si toutes nos séries avaient la même couleur - vous pouvez également ne pas les afficher du tout.
Highcharts expose une propriété symbolName
dans son objet graphic
, qui est une propriété elle-même sur l'objet point
. Les formes qu'il utilise sont:
"circle"
●"diamond"
♦"square"
■"triangle"
▲"triangle-down"
▼Avec ces informations, nous pouvons construire une instruction switch
dans notre fonction tooltip.formatter()
qui mappe le symbole pertinent avec le nom de symbole exposé par 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;
}
Nous pouvons ensuite placer le symbole dans notre info-bulle en référençant notre variable symbol
:
return this.x + '<br/>' + symbol + ' ' + this.series.name + ': ' + this.y;
Nous pouvons ensuite étendre ceci à la couleur dans notre point pour correspondre à la couleur de la série. Cela consiste simplement à envelopper notre symbol
dans un élément <span>
et à lui donner un ensemble style
de la couleur de la série, ce que Highcharts nous donne via this.series.color
:
'<span style="color:' + this.series.color + '">' + symbol + '</span>';
Cependant, avant de mettre cela en production, vous devez savoir qu’une info-bulle apparaît pour un point qui n’a ni objet graphic
ni propriété symbolName
. Cela peut se produire lorsqu'un point se trouve en dehors des limites visibles de notre graphique - une info-bulle apparaît lors du survol de la ligne, mais le point lui-même n'est pas visible et n'a donc pas besoin de propriétés graphiques.
Pour éviter les erreurs JavaScript, nous devons envelopper notre instruction switch
dans la clause if
suivante:
if ( this.point.graphic && this.point.graphic.symbolName )
Avec cela, vous voudriez également définir initialement votre variable symbol
comme une chaîne vide (''
) afin qu'elle ne s'affiche pas comme non défini dans notre info-bulle:
var symbol = '';
Pour cet exemple, j'ai utilisé l'image suivante:
Il convient de noter que, si cette solution fonctionne bien pour cette question, elle ne fonctionnera pas si vous utilisez des images de marqueur personnalisées. Lorsque celles-ci sont utilisées, il n'y a pas d'objet graphic
ni de propriété symbolName
. t veux afficher aucune des formes ci-dessus de toute façon.
La première chose à faire est de dire à Highcharts que nous souhaitons utiliser HTML dans notre info-bulle. Nous pouvons le faire en spécifiant useHTML: true
sur notre objet tooltip
:
tooltip: {
formatter: function() { ... },
useHTML: true
}
Heureusement, les info-bulles Highcharts prennent en charge l'élément HTML <img />
et nous permettent d'extraire l'URL d'image personnalisée via la propriété symbol
dans l'objet marker
à l'aide de this.point.marker.symbol
.
this.point.marker.symbol
-> "url(http://i.imgur.com/UZHiQFQ.png)"
Le deuxième obstacle consiste à supprimer les url(
et )
entourant l'URL de l'image. Pour cela, nous pouvons utiliser une expression régulière pour faire correspondre les bits que nous voulons supprimer. L'expression régulière avec laquelle je suis allé est /^url\(|\)$/g
, qui se présente comme suit:
La variable g
à la fin indique que nous souhaitons obtenir des correspondances afin de pouvoir remplacer à la fois url(
et )
par un seul coup franc:
var url = this.point.marker.symbol.replace(/^url\(|\)$/g, '');
-> "http://i.imgur.com/UZHiQFQ.png"
Nous pouvons ensuite le placer dans notre élément <img />
et le stocker dans notre variable symbol
:
symbol = '<img src="' + url + '" alt="Marker" />';
Enfin nous voulons nous assurer que les objets marker
et symbol
existent. J'ai choisi de le faire en tant que else if
en plus de l'instruction if
originale déclarée dans la partie S'assurer que le symbole existe} ci-dessus:
if ( this.point.graphic && this.point.graphic.symbolName ) { ) { ... }
else if ( this.point.marker && this.point.marker.symbol ) { ... }
Vous pouvez le faire comme ceci: 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
},
Je peux voir que c'est un fil plus ancien, mais puisque l'API Highcharts semble différer sur certains points depuis l'article précédent, je propose ici une mise à jour avec les détails qui ont fonctionné pour moi au cas où cela aiderait les autres ...
J'utilise Highcharts JS v4.2.6 (2016-08-02) (avec highcharts-ng 0.0.12) et je n'ai pas pu accéder à la propriété this.point.graphic.symbolName
pour implémenter la solution de James Donnelly _ J'ai dû le modifier pour accéder à this.series.symbol
.
Les symboles qui apparaissent dans l'instruction switch sont rendus à partir de leurs codes de formes géométriques UTF-8 . Il est donc nécessaire de structurer les instructions switch de la manière suivante: symbol = 'charactercodegoeshere';
. (ex: symbol = '& # 9679'; dans le cas du caractère de cercle)
Le code suivant a finalement rendu le symbole correct dans la couleur correcte dans l'info-bulle du graphique pour une série donnée:
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;
}
}
La méthode Highcharts.dateFormat () a été utilisée pour formater des horodatages Epoch-millisecondes à afficher.
Une solution légère consisterait à se connecter à l'événement Series afterInit
et à ajouter les symboles suivants:
Highcharts.addEvent(Highcharts.Series, 'afterInit', function() {
this.symbolUnicode = {
circle: '●',
diamond: '♦',
square: '■',
triangle: '▲',
'triangle-down': '▼'
}[this.symbol] || '●';
});
Voir la démonstration en direct: http://jsfiddle.net/pjqz79pv/1/