2014-10-31 8 views
6

का उपयोग करते समय स्केल के डोमेन का न्यूनतम मूल्य कैसे प्राप्त करें मेरे पास एक स्कैटर प्लॉट है जहां मैं एक संदर्भ बिंदु प्लॉट करने की कोशिश कर रहा हूं जो सीधे एक्स-अक्ष पर दिखाई दे, लेकिन मैं वाई- अक्ष तो जैसे:d3.js अच्छा()

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

मुद्दा यह है कि मैं x- अक्ष पर सीधे एक संदर्भ बिंदु साजिश करना चाहते हैं। मैं .nice() का उपयोग नहीं करते हैं, तो मैं आसानी से तो जैसे संदर्भ बिंदु प्लॉट कर सकते हैं:

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

लेकिन मैं जब .nice का उपयोग कर कैसे यह करने के लिए यह पता लगाने की() नहीं कर पा रहे। क्या कोई और तरीका है जिसके बारे में मैं इस बारे में जा सकता हूं जैसे किसी भी तरह एक्स-अक्ष लाइन के वाई-समन्वय प्राप्त करना?

मैंने डी 3 कोड के माध्यम से खुदाई शुरू की ताकि यह देखने के लिए कि मैं अच्छे मूल्य की गणना कैसे कर सकता हूं और मैं कोड को समझता हूं, लेकिन फिर से मूल्य की गणना करने के लिए अपर्याप्त लगता है कि डुप्लिकेट कोड के अनावश्यक रखरखाव का उल्लेख न करें - विशेष रूप से मेरे पास भी विचार करना संदर्भ बिंदु मुझे वाई-अक्ष के साथ साजिश करने की आवश्यकता होगी और मैं अपने एक्स-अक्ष के लिए लॉगरिदमिक स्केल का उपयोग कर रहा हूं (लॉगरिदमिक अच्छा() फ़ंक्शन रैखिक अच्छा() फ़ंक्शन से अलग है, इसलिए इसका मतलब अतिरिक्त डुप्लिकेट कोड और अनावश्यक रखरखाव होगा)।

विचार?

+2

'.nice के बाद()' 'yScale.domain() [0]'। –

उत्तर

11

आप बस .nice() के बाद अपने डोमेन के लिए पैमाने क्वेरी कर सकता है और उसके बाद इस बात का न्यूनतम मूल्य मिलता है:

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