2014-10-31 33 views
6

kullanırken ölçeğin etki alanının en düşük değerini nasıl elde edeceğim Doğrudan bir x ekseni üzerinde görünmesi gereken bir başvuru noktasını çizmeye çalıştığım bir dağılım grafiği var; bu şekilde:d3.js 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"); 

Sorun, doğrudan x ekseni üzerinde bir referans noktası çizmek istiyorum. Ben .nice() kullanmıyorsanız, ben kolayca şöyle referans noktası belirleyebiliriz:

 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); 

ama() .nice kullanırken bunu nasıl anlamaya görünüyor olamaz. Bu konuda gidebileceğim başka bir yol var mı, bir şekilde x ekseni çizgisinin y koordinatını almak gibi?

Güzel değeri nasıl hesaplayabildiğimi ve kodu nasıl anlayabildiğimi görmek için d3 kodunu kazmaya başladım, ancak yinelenen kodun gereksiz bakımından söz etmemek için değeri yeniden hesaplamak kaygılı görünüyor - özellikle de referans noktaları y ekseni boyunca çizim yapmam gerekecek ve x eksenim için logaritmik bir ölçek kullanıyorum (logaritmik nice() fonksiyonu lineer nice() fonksiyonundan farklıdır, bu da ek yinelenen kod ve gereksiz bakım anlamına gelir).

Fikirler?

+2

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

cevap

11

Sadece .nice() sonra etki için ölçek sorgulamak ve daha sonra bu en az bir değer elde edilebilir: .nice `sonra

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