我有一个散点图,我试图绘制一个应该直接出现在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");
问题是我想直接在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()时我似乎无法弄清楚如何做到这一点。还有其他方法可以解决这个问题,比如以某种方式得到x轴线的y坐标吗?
我开始挖掘d3代码,看看我如何计算好的值并且我理解代码,但是再次计算值似乎很浪费,更不用说重复代码的不必要的维护 - 特别是考虑到我也有参考我将需要沿y轴绘制点,并且我使用对数刻度来表示我的x轴(对数nice()函数与线性nice()函数不同,因此这将意味着额外的重复代码和不必要的维护)
想法?
答案 0 :(得分:14)
您可以在.nice()
之后查询其域的比例,然后获取该值的最小值:
var yMin = yScale.domain()[0];