2016-04-18 7 views
4

Ich möchte ein Kreisdiagramm mit chartist.js mit Beschriftungen (die in der Legende angezeigt werden) UND auch mit Prozentsätzen in der Torte selbst erstellen.chartist.js Tortendiagramm mit Etiketten UND Prozentsatz auf den Kuchen

Dies ist das Tortendiagramm. Ich möchte den Stückzahlen Prozentwerte hinzufügen. http://i.stack.imgur.com/SiIKb.png

Hier (https://gionkunz.github.io/chartist-js/examples.html) ist ein Beispiel mit Prozentsätzen in den Kuchen. Aber das funktioniert nur, wenn ich KEINE Labels hinzufüge.

Das Hinzufügen von Etiketten zu den Daten (z. B. Etiketten: ['Hund', 'Katze', 'Kuh', 'Schlange',]) ergibt "NaN%" -Anzeige.

Ich möchte die Prozentsätze in den Kuchen selbst sehen und auch Etiketten (für die Legende) in die Daten einfügen.

Ist das möglich?

Antwort

3

Sie müssen eine Array halten Sie Ihre Etiketten, und verwenden Sie die labelInterpolationFnc mit zwei Parametern Index zu bekommen, und es verwenden, um die richtige Etikett mit Prozentsatz zu erhalten:

var animals = ['Dog','Cat','Cow','Snake']; 

var data = { 
    series: [5, 3, 4] 
}; 

var sum = function(a, b) { return a + b }; 

new Chartist.Pie('.ct-chart', data, { 
    labelInterpolationFnc: function(value, idx) { 
    var percentage = Math.round(value/data.series.reduce(sum) * 100) + '%'; 
    return animals[idx] + ' ' + percentage; 
    } 
}); 

Beachten Sie, dass wir nicht die labels verwenden müssen in Ihrem Datenfeld (nur die Reihe), andernfalls wird der Wertparameter in labelInterpolationFnc mit dem Label anstelle des Werts gefüllt, so dass wir den Prozentsatz nicht berechnen konnten.

0

was Sie tun müssten, um das Etikett selbst herzustellen. Sie müssen eine Zeichenfolge wie [Labeltext] + '| erzeugen '+ [Teilen]

In meinem Fall habe ich eine Variable, die die Gesamtsumme aller Kuchen Elemente hält ... genannt [griall] ....

Dann gibt es diese Funktion, die Aktien berechnet ..

.

\t \t function calcProz(value, griall) { 
 
\t \t \t return Math.round(value/griall * 100) + '%'; 
 
\t \t };

später, als ich das Array zu erzeugen, die die Etiketten hält ich diese Funktion verwenden, um die Prozentsätze auf den Text hinzufügen ...

\t \t chartlabels[i]=dbresult[i].use + ' | ' + calcProz(dbresult[i].gri,griall);

wo dbresult [i] .use ist der erste Etikettentext und dbresult [i] .gri ist der Wert, der auf das Diagramm wird (beide aus einer Datenbank kommt)

schließlich das Diagramm bei der Definition fügen Sie nur die Etiketten ...

var data = { 
 
\t \t \t \t series: chartdata, 
 
\t \t // \t \t series: [25,16,15, 14, 4,2,1] 
 
\t \t \t \t labels: chartlabels 
 
\t \t 
 
\t \t };

+0

Vielen Dank für Ihre Zeit und Sie antworten. Ich bin mir nicht sicher, ob wir uns richtig verstehen. Ich habe bereits die Prozentsätze berechnet. Was ich will, ist, die Prozentsätze DIREKT das Kreisdiagramm selbst und die Etiketten (Texte) in der Legende anzuzeigen. Ich habe versucht, Ihre Lösung, aber es führt zu den Prozentsätzen in der Legende auch. War das deine Absicht? – Sabine

+0

In diesem Fall gehe ich davon aus, dass es nicht deine Lösung sein wird. Meine Lösung ist einfach die Prozentsätze hinter dem Labeltext ... (Wie Sie sehen, gibt es hier einige Probleme bei der Platzierung von Labels). einfach so: https://sectorbyte.de/owncloud/index.php/s/QvHmoCXoLj6laTz – user3639832

+0

Ich denke, was die Lösung hier sein könnte, ist die Prozentsätze als Label zu zeichnen und sie überall hin zu platzieren. Und fügen Sie eine separate Legende unter oder neben dem Diagramm hinzu. Es gibt einen Proof of Concept, wenn Sie diesem Link folgen ... https://github.com/gionkunz/chartist-js/issues/21 I – user3639832

Verwandte Themen