NVD3.js multiChart x-Achsen-Beschriftungen ist ausgerichtet auf die Zeilen, aber nicht in bars
Ich bin mit NVD3.js multiChart
zeigen mehrere Linien und Balken im Diagramm. Alles funktioniert gut, aber die x-Achsenbeschriftungen ist ausgerichtet nur auf der Linie Punkte, nicht bars. Ich will richtig ausrichten Etiketten, die direkt unterhalb der Balken, wie es sollte. Aber ich bekomme diese:
Mit roten Zeilen habe ich markiert, wo die Etiketten werden sollte.
Machte ich jsFiddle: http://jsfiddle.net/n2hfN/
Dank!
- Man könnte die line-plus bar-chart statt.
- Danke für die Antwort. Aber in
nv.models.linePlusBarChart
ich verwenden kann-Attributbar
true|false
, ich habe keine Optionen mehr, die für die verschiedenen Diagramme. - Zusätzlich brauche ich die position - auf welche Achse die Zeilen und auf die bars.
multiChart
ist damit, dass. - Ich denke, Sie könnten sich gegen einen Fehler in nvd3: wenn Sie die Quelle finden Sie ein Kommentar-Sprichwort: "/ / TODO: herausfinden, warum der Wert angezeigt wird, verschoben werden" in der x-Koordinate Berechnung der multiBar (die wiederum wird von multiChart).
- Vielen Dank für die Informationen - ich werde check it out.
- Irgendwie funktioniert einwandfrei leitungen1.padData(true)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Miichi erwähnt, dies ist ein Fehler in nvd3...
Ich bin überrascht, dass Sie eine TODO-um "herauszufinden, warum der Wert zu sein scheint verschoben", weil es ziemlich offensichtlich... Die Balken die Verwendung einer ordinalen Skala mit
.rangeBands()
und die line verwendet eine lineare Skala, und die beiden Skalen sind nie auf miteinander zu tun, außer, dass Sie die gleichen Endpunkte.Als eine Lösung zu nehmen die ordinal-Skala aus den bars, und einfach einstellen, indem Sie die Hälfte der bar Breite, um die Linie auf der x-Skala. Würde, dass die Linie Punkte in der Mitte der Balken. Ich kann mir vorstellen, dass etwas ähnliches geschieht in der
nv.models.linePlusBarChart
dass @LarsKotthoff erwähnt.Im Grunde, Sie Ihre Linie auf der x-Skala würde wie folgt Aussehen:
...wo
xScaleBars
ist die x-Skala verwendet, für die bar, die Teil des Diagramms.Durch kämmen durch den source-code für nvd3, es scheint, dass sich diese Skala ist zugänglich wie
chart.bars1.scale()
.Vielleicht eines Tages die Autoren nvd3 entscheiden, dass Ihre Unordnung der Bibliothek auch ein Teil der Dokumentation. Für jetzt kann ich Ihnen zeigen, die Art der Sache, dass würde das problem lösen, indem Sie ein benutzerdefiniertes Diagramm, und zeigt, wie die beiden Skalen beziehen würde.
Erste, ich ' ll verwenden Ihre Daten, sondern Sie trennen die Linien und Balken, die Daten in zwei arrays:
Dann einrichten der Waage für die bars. Für die x-Skala, werde ich die Verwendung einer ordinalen Skala und
rangeRoundBands
mit der Standard-Gruppe Abstand für nvd3 istmultiBar
ist 0.1. Für die y-Achse verwende ich einen regulären linearen Skala, mit.nice()
so, dass die Skala nicht auf eine unangenehme Wert, wie es standardmäßig in nvd3. Mit etwas Platz über dem größten Wert gibt Ihnen einige Kontext, die "nett" zu haben, wenn Sie versuchen zu interpretieren eines Diagramms.Nun hier ist der wichtige Teil,. Für die Leitung der x-Skala, machen Sie keine separate Skala, aber nur machen Sie es eine Funktion die bars' x-Skala:
Hier das komplette Beispiel als JSBin. Ich habe versucht zu dokumentieren, die große Abschnitte mit Kommentaren so ist es einfach zu befolgen Sie die Allgemeine Logik von Ihr. Wenn Sie herausfinden können, von der nvd3-source-code genau das, was jeder von der Elemente des multiChart aufgerufen werden und wie die einzelnen Skalen der einzelnen Teile, dann könnten Sie in der Lage, einfach stecken Sie die neue Skala.
Mein Gefühl ist es, dass Sie brauchen, um einen ziemlich guten Griff auf, wie d3 funktioniert, etwas nützliches zu tun mit nvd3, und wenn Sie wollen, um Sie anzupassen, sind Sie wahrscheinlich besser dran, nur Rollen Sie Ihre eigenen Diagramm. So erhalten Sie das komplette wissen und kontrollieren können, was die element Klassen-und Variablen-Namen der Teile des Diagramms sind, und können tun, was Sie wollen mit Ihnen. Wenn nvd3 bekommt die ordnungsgemäße Dokumentation, vielleicht wird sich eine einfache Lösung. Viel Glück, und ich hoffe, dass dies zumindest hilft Sie loslegen.