[英]Points change position on zoom in D3 scatterplot
在此示例之后,我做了一些数据点的散点图-正常工作。
现在,我尝试根据此实现使绘图平移和缩放。 一旦开始平移,我的点就以某种方式突然改变了它们的位置。 缩放时,它们也会朝错误的方向缓慢移动。 我认为我的缩放变换出了点问题,但是我没有看到错误。
function zoom() {
svg.select(".x.axis").call(xAxis);
svg.select(".y.axis").call(yAxis);
svg.selectAll(".dot")
.attr("transform", transform);
}
function transform(d) {
return "translate(" + xScale(d.lng) + "," + yScale(d.alt) + ")";
}
var zoomBeh = d3.behavior.zoom()
.x(xScale)
.y(yScale)
.on("zoom", zoom);
var svg = d3.select('svg')
.attr("width", w)
.attr("height", h)
.attr("class", "chart")
svg.call(zoomBeh);
缩放我的分数,可能是相关的。(y缩放模拟):
var xScale = d3.scale.linear()
.domain([d3.min(data, function (d) {
return d.lng;
}), d3.max(data, function (d) {
return d.lng;
})]).range([padding, w - padding]);
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("class", "dot")
.attr("cx", function (d) {
return xScale(d.lng);
})
.attr("cy", function (d) {
return yScale(d.alt);
});
和轴:
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.ticks(6);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + (h - padding) + ")")
.call(xAxis);
这里摆满小提琴。
提前致谢!
您应该在缩放功能中更新cx和cy值:
function zoom() {
svg.select(".x.axis").call(xAxis);
svg.select(".y.axis").call(yAxis);
svg.selectAll(".dot")
.attr("cx", function (d) {
return xScale(d.lng);
})
.attr("cy", function (d) {
return yScale(d.alt);
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.