2013-02-12 12 views
5

Sto utilizzando i grafici d3.js in una delle mie applicazioni. Eccoli in questa immagine Vedi ChartsCome impostare il dominio e la scala su un yaxis su una discreteBarChart nvd3.js

per l'asse Y sul grafico Denaro (vedere nell'immagine), voglio il massimo valore arrotondato a 400, non importa quale sia la dimensione massima bar è qui che è di $ 358,72, ma voglio per mantenere la barra a 358,72 ma sull'asse Y sarebbe 400 Limite.

codice perché è qui

tradesChart = [ 
     { 
     key: "Cumulative Return", 
     values: [ 
         { 
      "label" : "6E", 
      "value" : 100  }, 
        { 
      "label" : "NG", 
      "value" : 100  }, 
        { 
      "label" : "TF", 
      "value" : 67  }  ] 
     } 
    ]; 
     nv.addGraph(function() { 

     var chart = nv.models.discreteBarChart() 
      .x(function(d) { return d.label }) 
      .y(function(d) { return d.value/100 }) 
      .staggerLabels(true) 
      .showValues(true) 
      .valueFormat(d3.format('.0%')) 

     chart.yAxis.tickFormat(function(d) { return d3.format('d')(d*100) + '%'; }); 

     d3.select('#chart-trades svg') 
     .datum(tradesChart) 
     .transition().duration(500) 
     .call(chart); 

     nv.utils.windowResize(chart.update); 

     return chart; 
    }); 

Gentilmente mi aiuto per risolvere questo fuori

risposta

13

È necessario modificare il dominio della scala Y. Di solito è derivato dal valore massimo dei dati con una dichiarazione come la seguente:

yScale.domain([0, d3.max(data, function (d) { return d.v; }) ]); 

Nel tuo caso, si dovrebbe modificarlo per essere più simile a questo, invece:

yScale.domain([0, 400]); 

In alternativa, se si desidera impostare il valore massimo dai dati o un valore statico minimo, si potrebbe fare qualcosa di simile al seguente:

yScale.domain([0, d3.max(data, function (d) { return d.v > 400 ? d.v : 400; }) ]); 

a fu ll esempio jsfiddle è here.

Ecco come farlo con D3.js, non ho familiarità con la venerabile lib di nvd3.js, quindi non sono sicuro di come accedere alla bilancia, ma darò un'occhiata e vedrò se può trovarlo

+0

Grazie che funzionavano, ma una più quetion, come posso impostare dinamicamente intervalli utilizzando questo ho già provato questo 'd3.max (dati, funzione (d) {return dv;}) 'ma non funziona .. –

+0

d3.max funzionerà per impostare il valore massimo nei dati. Tuttavia, se si desidera utilizzare il massimo dei dati effettivi * o * un valore statico (400 per esempio) si potrebbe fare con qualcosa del tipo: yScale.domain ([0, d3.max (data, funzione (d) {return dv> 400? dv: 400;})]); Ho aggiornato il violino per mostrare questa tecnica su http://jsfiddle.net/activescott/69cwn/32/ –

Problemi correlati