Javascript 为什么赢了';t我的圆圈显示在“中”;像素“;单位?

Javascript 为什么赢了';t我的圆圈显示在“中”;像素“;单位?,javascript,d3.js,Javascript,D3.js,我有一组圆定义为 nodes = [{ x: xRange(xvalue), y: yRange(getY(xvalue)), ... }] vis.selectAll(".nodes") .data(nodes) .enter().append("circle") .attr("class", "nodes") .attr("cx", function (d) { return d.x; }) .attr("cy", function (d)

我有一组圆定义为

 nodes = [{
    x: xRange(xvalue),
    y: yRange(getY(xvalue)),
    ... 
}]

vis.selectAll(".nodes")
    .data(nodes)
 .enter().append("circle")
 .attr("class", "nodes")
 .attr("cx", function (d) {
    return d.x;
})
.attr("cy", function (d) {
    return d.y;
})
.attr("r", "7px")
.attr("fill", "black")
.attr("transform", function (p) {
    return "translate(" + p.x + "," + p.y + ")";
})
我试图保持点的坐标以“像素”为单位,而不是以“轴”为单位。唯一的问题是,我的点不会显示,除非它们出于某种原因以“轴”为单位。下面是一些测试用例来说明这一点:


在这两种情况下,我都在第一个象限中包含了一个测试点,它使用“像素”单位。测试点可以使用像素,而其他点不能使用像素,这有什么原因吗?

对于我的圆圈,我使用这个语句

.attr("transform", function (p) {
        return "translate(" + p.x + "," + p.y + ")";
    })
这很麻烦,因为它会导致点基于轴单位进行平移。将此更改为

.attr("transform", function (p) {
        return "translate(" + xRange.invert(p.x) + "," + yRange.invert(p.y) + ")";
    })
转换将正确地采用像素单位并绘制它们