2012-08-01 8 views
50

Ich versuche den y-Achsenbereich des Diagramms von 1-100 zu setzen.d3.js & nvd3.js - So stellen Sie den y-Achsenbereich ein

konsultierten die API-Dokumentation und eine mögliche Lösung mit axis.tickValues ​​gefunden als https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues

jedoch hier gesehen, mit der Option funktioniert nicht. Lesen Sie weiter unten auf der Dokumentationsseite oben unter axis.tickSize verknüpft wurde die folgende Zeile

getupft

Die Ende Zecken werden durch die zugehörige Skala der Domäne Ausmaß bestimmt, und sind Teil der Domäne erzeugt Pfad statt einer Zecke Linie

Also ich nehme es Einstellung der Min und Max des Bereichs kann nicht durch die Option Achse erfolgen.

Irgendwelche Ideen, wo ich den Bereich angeben kann?

Antwort

76

Eine Lösung gefunden.

Das Einfügen von .forceY([0,100]) in die Instanziierung des Diagramms zwingt die Achse dazu, den im Array angegebenen Bereich anzunehmen.

Aus dem Beispiel hier http://nvd3.org/livecode/#codemirrorNav

Anfügen .forceY([0,100]) auf die Chart-Variable funktioniert.

+4

Dies funktioniert für mich den Bereich jenseits der Max/Min für ein Liniendiagramm zu erweitern, aber nicht um den Bereich kleiner als die Daten zu machen. – arboc7

+6

Hinweis: forceY scheint auf gestapelten Flächendiagrammen nicht zu funktionieren =/ –

+5

Hinweis: Sie können '.forceY (val)' verwenden, um das Minimum zu erzwingen, und das Maximum bleibt dynamisch. –

31

Wie der Name vermuten lässt, fügt dies die Werte im Array zu Ihrer Domäne y hinzu, die y-Domäne wird nicht auf [0,100] festgelegt. Wenn Sie das also auf [0,100] setzen und die Domäne Ihrer Daten -10 bis 110 lautet, lautet die Domäne [-10,110].

Nun, wenn Sie die Domain sein [0,100] auch wenn Ihre Daten größer Sie chart.yDomain([0,100]) wollte verwenden können ... aber in der Regel wollen Sie Ihre Domain schließen oder Ihre Daten, so empfehle ich mit chart.forceY statt chart.yDomain. Wie Sie sehen werden, ist eine der häufigsten Anwendungen für forceY forceY([0]), um 0 immer in der Domäne zu erstellen.

Hoffnung, die Ihnen hilft zu verstehen, was die Funktion tatsächlich tut, und Arboc7, sollte dies erklären, warum es nicht funktioniert, um den Bereich kleiner als die Datenmenge zu machen.

10

Für gestapelte Flächendiagramme funktioniert .forceY([0,100]) nicht. Verwenden statt .yDomain([0,100])

+1

Gibt es eine Möglichkeit, den Bereich für das gestapelte Diagramm zu erzwingen, aber beim Analysieren eines einzelnen Datasets dennoch automatisch skalieren zu lassen? z.B. Wenn Sie im Beispiel auf "Nordamerika" klicken http://nvd3.org/examples/stackedArea.html – francisbyrne

+0

Wenn Sie mehrere y-Achsen haben, wie in einem Multi-Chart-Beispiel, dann müssen Sie 'yDomain1' und' yDomain2 tun ', usw. Siehe das Problem, das hier aufgelistet ist: https://github.com/krispo/angular-nvd3/issues/81 – bwest87

6

Wenn Sie die y-domain (den Bereich von Zahlen, die angezeigt werden sollen) bedeuten Einstellung für gestapelte Flächendiagramme, das funktioniert für mich:

nv.models.stackedAreaChart() 
    .x(function(d) {...}) 
    .y(function(d) {...}) 
    .yDomain([0, maxY]) 
... 
0

Ich habe versucht, wie:

chart.forceY([DataMin, DataMax]); 

Datamin und Datamax müssen aus Array berechnet werden. Auch inOrder Achse Punkte dynamisch anzupassen, wenn Filter angewandt werden müssen, um benutzerdefinierte Ereignisse behandeln Filter klicken wie:

$('g.nv-series').click(function() { 
    //Calculate DataMin, DataMax from the data array      
    chart.forceY([DataMin, DataMax]);       
}); 

So Diagramm wird anpassen jedes Mal Filter angewandt wird.

+0

Wenn Sie nur die Standard-Domains und Bereiche verwenden, wird nvd3 die Min/Max automatisch basierend auf Ihrem Datensatz setzen . und wird neu berechnet, wenn neue Daten hinzugefügt werden. –

0

Ich hatte ein ähnliches Problem und es gelöst, indem explizit die Domäne in der yScale des yAchse definieren, dh

var yscale = d3.scale.linear() 
        .domain([0,100]) 
        .range([250, 0]); 
var yAxis = d3.svg.axis() 
        .scale(yscale);