2014-10-31 3 views
6

Ich habe ein Streudiagramm wo ich versuche einen Bezugspunkt zu zeichnen, der direkt auf der x-Achse erscheinen soll, aber ich erstelle den y- Achse wie folgt:d3.js Wie bekomme ich den minimalen Wert der Domäne der Skala, wenn ich nice() verwende

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

Das Problem ist, dass ich einen Bezugspunkt direkt auf der X-Achse zeichnen möchte. Wenn ich nicht .nice() verwenden, kann ich leicht den Referenzpunkt plotten wie so:

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

aber ich kann nicht scheinen, um herauszufinden, wie dies zu tun ist, wenn .nice() verwenden. Gibt es eine andere Möglichkeit, wie ich die y-Koordinate der x-Achsenlinie irgendwie bekommen könnte?

Ich fing an, durch den Code d3 zu graben, um zu sehen, wie ich den netten Wert berechnen konnte und den Code verstehe, aber es scheint verschwenderisch, den Wert wieder zu berechnen, die unnötige Wartung von doppeltem Code nicht zu erwähnen - besonders, wenn ich auch habe Referenzpunkte, die ich entlang der y-Achse zeichnen muss, und ich verwende eine logarithmische Skala für meine x-Achse (die logarithmische nice() -Funktion unterscheidet sich von der linearen nice() -Funktion, dies würde zusätzlichen Code und unnötige Wartung bedeuten).

Ideen?

+2

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

Antwort

11

Sie können einfach den Maßstab für seine Domäne nach .nice() abfragen und dann den Minimalwert davon bekommen:

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