Anzeigen von Kreisdiagrammdatenwerten für jedes Slice in chart.js

Nithya.K:

Ich verwende Chart.js zum Zeichnen von Kreisdiagrammen auf meiner PHP-Seite. Ich habe einen Tooltip gefunden, der die einzelnen Slice-Werte anzeigt.
Geben Sie hier die Bildbeschreibung ein

Aber ich möchte diese Werte wie im folgenden Bild anzeigen. Geben Sie hier die Bildbeschreibung ein

Ich weiß nicht, wie ich das mit chart.js machen soll.

Bitte hilf mir.

Mein Javascript-Code:

function drawPie(canvasId,data,legend){
    var ctx = $("#pie-canvas-" + canvasId).get(0).getContext("2d");

    var piedata = [];
    $.each(data,function(i,val){
        piedata.push({value:val.count,color:val.color,label:val.status});
    });
    var options =
    {
        tooltipTemplate: "<%= Math.round(circumference / 6.283 * 100) %>%",
    }
    var pie = new Chart(ctx).Pie(piedata,options);
    if(legend)document.getElementById("legend").innerHTML = pie.generateLegend();
}

PHP-Code:

printf('<table><tr>');
echo '<td style="text-align: right;"><canvas id="pie-canvas-'
    . $canvasId
    . '" width="256" height="256" ></canvas></td><td style="text-align: left;width:360px;height:auto" id="legend" class="chart-legend"></td></tr></table>';

     echo '<script type="text/javascript">drawPie('
    . $canvasId
    . ', '
    . $data3
    .', '
    . $legend
    . ');</script>';

Geben Sie hier die Bildbeschreibung ein

Spencer Wieczorek:

Soweit ich weiß, glaube ich nicht, dass Chart.JS Funktionen zum Zeichnen von Text in einem Kreisdiagramm bietet. Das heißt aber nicht, dass Sie es nicht selbst in nativem JavaScript tun können. Ich werde Ihnen ein Beispiel geben, wie das geht. Im Folgenden finden Sie den Code zum Zeichnen von Text für jedes Segment im Kreisdiagramm:

function drawSegmentValues()
{
    for(var i=0; i<myPieChart.segments.length; i++) 
    {
        // Default properties for text (size is scaled)
        ctx.fillStyle="white";
        var textSize = canvas.width/10;
        ctx.font= textSize+"px Verdana";

        // Get needed variables
        var value = myPieChart.segments[i].value;
        var startAngle = myPieChart.segments[i].startAngle;
        var endAngle = myPieChart.segments[i].endAngle;
        var middleAngle = startAngle + ((endAngle - startAngle)/2);

        // Compute text location
        var posX = (radius/2) * Math.cos(middleAngle) + midX;
        var posY = (radius/2) * Math.sin(middleAngle) + midY;

        // Text offside to middle of text
        var w_offset = ctx.measureText(value).width/2;
        var h_offset = textSize/4;

        ctx.fillText(value, posX - w_offset, posY + h_offset);
    }
}

A Pie Chart has an array of segments stored in PieChart.segments, we can look at the startAngle and endAngle of these segments to determine the angle in between where the text would be middleAngle. Then we would move in that direction by Radius/2 to be in the middle point of the chart in radians.

In the example above some other clean-up operations are done, due to the position of text drawn in fillText() being the top right corner, we need to get some offset values to correct for that. And finally textSize is determined based on the size of the chart itself, the larger the chart the larger the text.

Fiddle Example


With some slight modification you can change the discrete number values for a dataset into the percentile numbers in a graph. To do this get the total value of the items in your dataset, call this totalValue. Then on each segment you can find the percent by doing:

Math.round(myPieChart.segments[i].value/totalValue*100)+'%';

In diesem Abschnitt myPieChart.segments[i].value/totalValuewird der Prozentsatz berechnet, den das Segment im Diagramm einnimmt. Zum Beispiel, wenn das aktuelle Segment einen Wert von 50und der Gesamtwert hatte 200. Dann wäre der Prozentsatz, den das Segment einnahm, : 50/200 => 0.25. Der Rest soll das schön aussehen lassen. 0.25*100 => 25, dann fügen wir %am Ende ein hinzu. Für ganzzahlige Prozentkacheln habe ich auf die nächste ganze Zahl gerundet, obwohl dies zu Genauigkeitsproblemen führen kann. Wenn wir mehr Genauigkeit benötigen, können Sie .toFixed(n)Dezimalstellen speichern. Zum Beispiel könnten wir dies tun, um bei Bedarf eine einzelne Dezimalstelle zu speichern:

var value = myPieChart.segments[i].value/totalValue*100;
if(Math.round(value) !== value)
    value = (myPieChart.segments[i].value/totalValue*100).toFixed(1);
value = value + '%';

Geige Beispiel eines Perzentils mit Dezimalstellen

Geige Beispiel eines Perzentils mit ganzen Zahlen

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Anzeigen von Datenwerten in Chart.js

Chart.js 2.7.0 Gruppiertes horizontales Balkendiagramm, wie kann ein Tooltip zum Anzeigen von Daten für einen Balken und nicht für die gesamte Gruppe erstellt werden?

Anzeigen der Wortanzahl für jedes Wort

Vergleichsattribute für jedes Produkt anzeigen

Probleme beim Anzeigen von Achsenbeschriftungen in Chart.js

Anzeigen von Optionen für abhängige Auswahlfelder in eckigen js

Legen Sie mit Chart.js den Maximalwert für jedes Etikett fest

Wie kann ich den Breiten- und Längengrad anzeigen, der von JSON-Daten auf Google Map erhalten wurde, indem ich modal für jedes der Suchergebnisse in vue js verwende?

Chart.js: Nur Beschriftungen auf der x-Achse für Datenpunkte anzeigen

Farbsätze für die Rahmenfarbe von Chart.js.

Wie kann man den durchschnittlichen Umsatz für jedes Jahr innerhalb von zehn Jahren für eine bestimmte Stadt in Pandas anzeigen?

Abfrageergebnis für jedes Tabellenfeld als separate Datensätze anzeigen

Slice-Datenrahmen für jedes einzelne Spaltenpaar

Liste der Tupel für jedes Pandas-Datenrahmen-Slice

Anzeigen von Prozentsatz und Summe im gestapelten Balkendiagramm von chart.js

Geben Sie im Balkendiagramm von Chart.js die unterschiedliche Dicke jedes Balkens an

Wie ordne ich ein Array von Objekten zu und rufe Netzwerkdaten für jedes in JS ab?

Verwendung von Variablen für jedes Objekt

Ich habe ein Optionsformular und möchte für jedes Element des von mir ausgewählten Options-Tags ein anderes Bild aus einer JSON-Datei anzeigen

Ich möchte alle Commits vor HEAD anzeigen und alle Zweigreferenzen für jedes Commit anzeigen

Problem beim Anzeigen von zwei Diagrammen in einem einzelnen Diagramm mit Javascript und chart.js

Datalabels von Chart JS können keine vollständigen Werte anzeigen

Anzeigen von Werten desselben Elements für ein anderes Datum in react.js

Vue Js - Anzeigen von Elementen mit v-for-Schleife in einer einzigen Zeile (für Paginierung)

Wie kann ich die Füllfarben jedes Felds für ein Schachbrett in JS mithilfe von Canvas ändern?

Anzeigen von Bildern in Markdown für Gatsby

Chart.js - Donut-Tooltip für aktives Segment anzeigen (beim Klicken auf die externe Schaltfläche)

Chart.JS: Wie kann ich Datenlabels nur anzeigen, wenn die Donutgröße für den Text groß genug ist?

Anzeigen von Tabellenspalten untereinander für kleine Anzeigen (ansprechendes Layout)