2 votes

Série Highstock Comparaison avec le jour précédent

J'ai mis en œuvre le graphique HighStock présenté à l'adresse suivante :

http://www.highcharts.com/stock/demo/compare

Ce graphique montre la variation en pourcentage à partir du premier point de données, c'est-à-dire le plus à gauche. Certains analystes boursiers me disent que cela n'est pas très utile et qu'ils préféreraient voir le pourcentage de variation à partir du point de données précédent ou, en d'autres termes, si je regardais "aujourd'hui" sur le graphique, je voudrais voir le pourcentage de variation à partir d'hier. J'ai consulté l'API highstock et je n'ai pas trouvé de moyen de définir la fonction de pourcentage de variation. Existe-t-il un moyen approprié pour que highstock le fasse ou dois-je utiliser un graphique linéaire highcharts pour y parvenir ?

5voto

Robodude Points 1777

J'ai déjà dû faire quelque chose de similaire dans Highcharts. Je voulais obtenir le changement réel d'un point de données à l'autre.

Ce que je fais, c'est que je regarde le point actuel (this.x) et je trouve sa position dans le tableau de la série. A partir de là, je trouve facilement l'index du point précédent (index = a - 1) et je fais le calcul. J'espère que cela vous aidera :)

EDIT :

J'ai consulté l'API de stockcharts et j'ai trouvé la solution pour ce produit :

tooltip: {
    formatter: function() {
        var s = '<b>'+ Highcharts.dateFormat('%A, %b %e, %Y', this.x) +'</b><br>';

        $.each(this.points, function(i, point) {

            s += '<span style="font-weight: bold; font-size: 1.2em; color: ' + point.point.series.color + ';">' + point.point.series.name + '</span>:<span style="font-weight: bold; font-size: 1.2em;">' + point.y + '</span>' ;
            s += '<span style="font-size: .8em;">';

            var target = this.x;

            index = 0;
            for (var a = 0; a < point.series.points.length; a++) {
               if (point.series.points[a].x == target)
               {
                    index = a - 1;
               }
            }
            var delta = 0;
            var change = 0;
            if (index >= 0)
            {
                delta = this.y - point.series.points[index].y;
                change = (delta  / point.series.points[index].y) * 100;
            }
            s += Math.round(change,2) + '%</span>';

            s +='</span><br>';

        });

        return s;
    }
},

Et un jsfiddle fonctionnel : http://jsfiddle.net/nLjsc/2/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X