Label außerhalb arc (Kreisdiagramm) d3.js
Ich bin neu d3.js und I"m versuchen zu machen, ein Pie-chart mit.
Ich habe nur ein problem: ich kann nicht mein Beschriftungen außerhalb meiner Bögen...
Die Beschriftungen positioniert sind, mit arc.Schwerpunkt
arcs.append("svg:text")
.attr("transform", function(d) {
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor", "middle")
Wer kann mir helfen mit diesem?
InformationsquelleAutor der Frage Ibe Vanmeenen | 2011-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich das problem lösen - mit Trigonometrie :).
Sehen fiddle: http://jsfiddle.net/nrabinowitz/GQDUS/
Grundsätzlich Aufruf
arc.centroid(d)
gibt ein[x,y]
array. Sie können verwenden den Satz des Pythagoras zur Berechnung der hypotenuse, das ist die Länge der Linie von der Mitte der Torte, die arc Schwerpunkt. Dann können Sie die Berechnungenx/h * desiredLabelRadius
undy/h * desiredLabelRadius
zu berechnen, die gewünschtex,y
für Ihr label anchor:Der einzige Nachteil hier ist, dass
text-anchor: middle
ist keine gute Wahl mehr - Sie wären besser dran, die Einstellung dertext-anchor
auf welcher Seite der Torte sind wir auf:InformationsquelleAutor der Antwort nrabinowitz
Dank!
Ich fand einen anderen Weg, um dieses problem zu lösen, aber deiner scheint besser 🙂
Erstellte ich einen zweiten Bogen mit einem größeren radius und position von Etiketten.
InformationsquelleAutor der Antwort Ibe Vanmeenen
Speziell für Kreisdiagramme, die
d3.layout.pie()
Funktion format-Daten mit einemstartAngle
undendAngle
Attribute. Der radius kann das sein, was Sie sich wünschen (wie weit vom Zentrum Sie möchten, platzieren Sie das Etikett).Kombiniert man diese Informationen mit ein paar trigonometrische Funktionen können Sie bestimmen die x-und y-Koordinaten-Etiketten.
Betrachten Sie diese gist/block.
Bezug auf die x/y Positionierung der Texte, die Magie ist in dieser Zeile (formatiert für bessere Lesbarkeit):
((d.endAngle - d.startAngle) /2) + d.startAngle
gibt uns unsere Winkel (theta) im Bogenmaß.(radius - 12)
ist der willkürlichen radius wählte ich für die position des Textes.-1 *
die y-Achse ist invertiert (siehe unten).Die trigonometrischen Funktionen verwendet werden:
cos = adjacent /hypotenuse
undsin = opposite /hypotenuse
. Aber es gibt ein paar Dinge, die wir berücksichtigen müssen, um diese Arbeit mit unseren Etiketten.Dass dagegen etwas kleiner und hat im Grunde die Wirkung vertauschen
sin
undcos
. Unsere trigonometrischen Funktionen werden zu:sin = adjacent /hypotenuse
undcos = opposite /hypotenuse
.Substitution von Variablen-Namen haben wir
sin(radians) = x /r
undcos(radians) = y /r
. Nach einigen algebraischen Manipulationen, die wir bekommen können beide Funktionen in Bezug auf die x-und y jeweilsr * sin(radians) = x
undr * cos(radians) = y
. Von dort aus, nur stecken Sie diese in die transform/translate-Attribut.,Werden die Etiketten in der richtigen Position, um Sie zu suchen ausgefallene, müssen Sie einige styling-Logik wie diese:
Damit werden die Etiketten von 10:30 Uhr bis 1:30 Uhr und von 4:30 Uhr bis 7:30 Uhr Anker in der Mitte (oben und unten), werden die Beschriftungen von 1:30 Uhr bis 4:30 Uhr Anker auf der linken Seite (die Rechte), und die Etiketten von 7:30 Uhr bis 10:30 Uhr Anker auf der rechten Seite (Sie sind auf der linken Seite).
Den gleichen Formeln können verwendet werden, für jede D3 radial-graph, der einzige Unterschied ist, bestimmen Sie die Winkel.
Ich hoffe, dies hilft jemand stolpert über Sie!
InformationsquelleAutor der Antwort clayzermk1
Ich weiß nicht, ob das hilft, aber ich war in der Lage zu schaffen Bögen, wo ich den text platzieren, beide, auf den Bogen und nur außerhalb. In einem Fall, wo platziere ich die Größen der Bogen in den Bögen, die ich drehen Sie den text auf dem Bogen zu passen Sie den Winkel des Kreisbogens. In der anderen, wo ich platzieren Sie den text außerhalb des Bogens, es ist einfach horizontale. Der code befindet sich unter: http://bl.ocks.org/2295263
Mein Bestes,
Frank
InformationsquelleAutor der Antwort Information Technology
Den folgenden CoffeeScript gearbeitet für mich, um Etiketten noch innerhalb der Kreissegmente, aber in Richtung der äußeren Kante:
InformationsquelleAutor der Antwort Sarah Vessels
Diese Funktion berechnet den Mittelpunkt des pie slice für ein Tortendiagramm. Ich fügen Sie eine Funktion, um den Mittelpunkt des Bogens.
Unten ist das Bild basiert auf meiner neuen Funktion .
siehe link: https://github.com/mbostock/d3/issues/1124
InformationsquelleAutor der Antwort Sean Wang
War dies der low-cost-Antwort, die ich war glücklich mit. Es drückt alle Etiketten horizontal (das ist, wo ich den zusätzlichen Platz):
InformationsquelleAutor der Antwort cheepychappy
Also, wenn Sie wollen, gehen mit einem sehr gut aussehende Legende statt zufälliger text hängen herum. Fand ich eine ziemlich gute Lösung um Etiketten. wie die Legende hinzufügen, um ein Kreisdiagramm mit D3js? Und wie zu zentralisieren das Kreisdiagramm?
InformationsquelleAutor der Antwort DeadlyChambers
Ich erreicht das gleiche durch Zeichnung Prozentsatz als Etiketten, die außerhalb des Kreisdiagramms graph, hier ist der code http://bl.ocks.org/farazshuja/e2cb52828c080ba85da5458e2304a61f
InformationsquelleAutor der Antwort FarazShuja