d3.js使用nice()时如何获得scale的域的最小值

Jor*_*dan 11 javascript d3.js

我有一个散点图,我试图绘制一个应该直接出现在x轴上的参考点,但我正在创建y轴,如下所示:

   // 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");
Run Code Online (Sandbox Code Playgroud)

问题是我想直接在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);
Run Code Online (Sandbox Code Playgroud)

但是在使用.nice()时我似乎无法弄清楚如何做到这一点.有没有其他方法可以解决这个问题,比如以某种方式得到x轴线的y坐标?

我开始挖掘d3代码,看看我如何计算好的值,我理解代码,但再次计算值似乎很浪费,更不用说重复代码的不必要的维护 - 特别是考虑到我也有参考点我会需要沿y轴绘制,我使用对数刻度表示我的x轴(对数nice()函数不同于线性nice()函数,因此这意味着额外的重复代码和不必要的维护).

想法?

Lar*_*off 19

您可以简单地查询其域的比例.nice(),然后获取其最小值:

var yMin = yScale.domain()[0];
Run Code Online (Sandbox Code Playgroud)