2014-10-31 14 views
6

Ho un grafico a dispersione dove sto cercando di tracciare un punto di riferimento che dovrebbe apparire direttamente sull'asse x, ma sto creando il y- Asse in questo modo:d3.js come ottenere il valore minimo del dominio della bilancia quando si utilizza nice()

// give ourselves some space 
    yMin = yMin * 0.9; 
    yMax = yMax * 1.1; 

    // set up y 
    var yValue = function (d) { 
      return d.price; 
     }, 
     yScale = d3.scale.linear() 
      .domain([yMin, yMax]) 
      .range([height, 0]) 
      .nice(), 
     yAxis = d3.svg.axis() 
      .scale(yScale) 
      .orient("left"); 

Il problema è che voglio tracciare un punto di riferimento direttamente sull'asse x. Se io non uso .nice(), posso facilmente tracciare il punto di riferimento in questo modo:

 var reference = svg.append('g').attr("class", "grid-reference"); 
     reference.append("circle").attr("id", "some-reference-value") 
      .attr("class", "dot") 
      .attr("r", 9) 
      .attr("cx", xScale(someReferenceValue)) 
      .attr("cy", yScale(yMin)) 
      .style("fill", "grey") 
      .style("opacity", 1); 

ma io non riesco a capire come fare questo quando si utilizza .nice(). C'è un altro modo in cui potrei andare su questo come ottenere in qualche modo la coordinata y della linea dell'asse x?

Ho iniziato a scavare attraverso il codice d3 per vedere come potrei calcolare il valore buono e ho capito il codice, ma mi sembra inutile calcolare nuovamente il valore per non menzionare la manutenzione non necessaria del codice duplicato, specialmente considerando che ho anche punti di riferimento Avrò bisogno di tracciare lungo l'asse ye sto usando una scala logaritmica per il mio asse x (la funzione logarithmic nice() è diversa dalla funzione linear nice() quindi questo significherebbe un ulteriore codice duplicato e una manutenzione non necessaria).

Idee?

+2

Dopo '.nice()' 'yScale.domain() [0]'. –

risposta

11

Si può semplicemente interrogare la scala per il suo dominio dopo .nice() e quindi ottenere il valore minimo di che:

var yMin = yScale.domain()[0]; 
Problemi correlati