d3.js & nvd3.js - comment définir la plage de l'axe des y

J'essaie de définir la plage d'axe y du graphique de 1-100.

A consulté la documentation de L'API et trouvé une solution possible avec axis.tickValues comme on le voit ici https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues

Cependant, l'utilisation de l'option ne fonctionne pas. Lecture plus bas sur la page de documentation liée ci - dessus sous axis.tickSize, la ligne suivante a été repérée

Les ticks de fin sont déterminés par le domaine de l'échelle associée étendue, et font partie du domaine de chemin généré plutôt qu'une ligne de tick

Donc, je prends le réglage du min et du max de la plage ne peut pas être fait via L'option Axis.

Des idées sur l'endroit où je peux spécifier la plage?

54
demandé sur Yannick Blondeau 2012-08-02 00:13:43

6 réponses

Trouvé une solution.

L'ajout de .forceY([0,100]) à l'instanciation du graphique force l'axe à prendre la plage spécifiée dans le tableau.

De l'exemple ici http://nvd3.org/livecode/#codemirrorNav

L'ajout de .forceY([0,100]) à la variable graphique fonctionne.

79
répondu Viet 2013-12-12 18:01:35

Comme le nom devrait Le suggérer, cela ajoute les valeurs du tableau à votre domaine y, Il ne définit pas le domaine y sur [0,100]. Donc, si vous définissez ceci à [0,100] et que le domaine de vos données est -10 à 110, le domaine sera [-10,110].

Maintenant, si vous voulez que le domaine soit [0,100] même si vos données sont plus grandes, Vous pouvez utiliser chart.yDomain([0,100]) ... Mais généralement, vous voulez que votre domaine inclue ou vos données, donc je recommande fortement d'utiliser chart.forceY au lieu de chart.yDomain. Comme vous le verrez, une des utilisations les plus courantes pour forceY est forceY([0]) pour faire 0 toujours dans le domaine.

J'espère que cela vous aidera à comprendre ce que fait réellement la fonction, et arboc7, cela devrait expliquer pourquoi cela ne fonctionne pas pour rendre la plage plus petite que celle de l'ensemble de données.

32
répondu Bob Monteverde 2016-05-10 08:25:00

Pour les graphiques en zones empilées, .forceY([0,100]) ne fonctionne pas. Utiliser à la place .yDomain([0,100])

10
répondu Pierre-Yves V. 2016-05-10 08:23:37

Si vous voulez dire définir le y-domain (la plage de nombres qui doit être affichée) pour les graphiques en zones empilées, cela fonctionne pour moi:

nv.models.stackedAreaChart()
  .x(function(d) {...})
  .y(function(d) {...})
  .yDomain([0, maxY])
...
7
répondu sepans 2016-05-10 08:25:11

J'ai essayé comme:

chart.forceY([DataMin, DataMax]);

Datamin et Datamax doivent calculer à partir du tableau. Aussi pour ajuster dynamiquement les points d'axe lorsque le filtre s'applique, vous devez gérer les événements de clic personnalisés du filtre comme:

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

Donc graph ajustera chaque fois que le filtre s'applique.

0
répondu Dijo 2016-01-17 20:22:48

J'ai eu un problème similaire et l'ai résolu en définissant explicitement le domaine dans l'échelle y de l'axe yAxis, c'est-à-dire

var yscale = d3.scale.linear()
                     .domain([0,100])
                     .range([250, 0]);
var yAxis = d3.svg.axis()
                  .scale(yscale);
0
répondu myrcutio 2016-02-22 21:32:47