Les graphiques circulaires jQuery Flot montrent la valeur des données au lieu du pourcentage

Je ne sais pas comment obtenir flot.graphique pour changer les données indiquées dans les étiquettes d'un pourcentage des "données brutes" aux données réelles. Dans mon exemple, j'ai créé un diagramme à secteurs avec les nombres de messages lus/non lus.

nombre de messages lus: 50. Nombre de messages non lus: 150.

le diagramme créé montre le pourcentage de messages lus comme 25%. À cet endroit je veux montrer les 50 messages réels. Voir l'image ci-dessous:

enter image description here

Le code que j'ai utilisé pour créer le gâteau:

var data = [
    { label: "Read", data: 50, color: '#614E43' },
    { label: "Unread", data: 150, color: '#F5912D' }
];

Et:

    $(function () {
        $.plot($("#placeholder"), data,
           {
            series: {
                pie: {
                    show: true,
                    radius: 1,
                    label: {
                        show: true,
                        radius: 2 / 3,
                        formatter: function (label, series) {
                            return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';

                        },
                        threshold: 0.1
                    }
                }
            },
            legend: {
                show: false
            }
        });
    });

Est-ce possible?

avec la réponse de @Ryley je suis venu à une solution sale. Quand je l'ai sortie de la série.données les valeurs "1,150" et "1,50" ont été retournées. J'ai eu l'idée de soustraire les deux premiers caractères de la valeur retournée et d'afficher la valeur soustraite.

String(str).substring(2, str.lenght)

voici le diagramme à secteurs que j'ai créé avec cette solution:

enter image description here

Ce n'est pas la meilleure solution, mais cela fonctionne pour moi. si quelqu'un connaît une meilleure solution....

23
demandé sur casperOne 2011-04-15 11:53:35

4 réponses

j'ai trouvé la réponse à la question. L'objet de données est un tableau multidimensionnel. Pour obtenir le acual données, utilisez le code suivant:

    $(function () {
    $.plot($("#placeholder"), data,
       {
        series: {
            pie: {
                show: true,
                radius: 1,
                label: {
                    show: true,
                    radius: 2 / 3,
                    formatter: function (label, series) {
                        return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + series.data[0][1] + '</div>';

                    },
                    threshold: 0.1
                }
            }
        },
        legend: {
            show: false
        }
    });
});

Notez le code " série.données[0] [1] " pour extraire les données.

42
répondu Ruud van de Beeten 2011-04-18 08:51:21

cela dépend un peu de ce que vous voulez dire par "à cet endroit je veux montrer les 50 messages actuels".

Supposons que vous voulez avoir un popup div quand ils sourient la section lire ou non lu et puis montrer les messages là-dedans.

la première étape consiste à rendre votre diagramme à secteurs interactif. Vous devez ajouter le grid option comme suit:

legend: {
    show: true;
},
grid: {
    hoverable: true,
    clickable: true
}

ensuite, vous devez lier les événements click/hover aux fonctions qui récupèrent vos messages et s'affichent eux:

$("#placeholder").bind('plothover',function(e,pos,obj){

});

$("#placeholder").bind('plotclick',function(e,pos,obj){
    if (obj.series.label == 'Read'){
       //show your read messages
    } else {
       //show your unread messages
    }       
});

C'est ça!


maintenant, si ce que vous voulez dire est simplement que vous voulez afficher tous les messages directement dans le gâteau tout le temps, vous avez juste besoin de changer votre formateur de référence une variable globale qui contient vos messages.

2
répondu Ryley 2011-04-15 15:21:37

Vous pouvez utiliser:

formatter: function (label, series) {
    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">'+Math.round(series.percent)+"%<br/>" + series.data[0][1] +'</div>';
},
1
répondu Diogenes Chepe Ardines Salazar 2014-03-12 17:02:51

Essayez quelque chose comme ProtoVis. Il ya aussi quelques bonnes réponses sur SO avec des liens vers d'autres bibliothèques gratuites de visualisation de données utiles. Si vous avez quelques dollars!--3 -- > cartes de fusion est aussi très bon.

0
répondu FoneyOp 2011-04-15 15:25:57