在D3散点图中,点在放大时改变位置
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);
});
}
相关文章:
- Javascript改变位置赢得'不适用于Chrome或IE
- 最大宽度正在改变位置:固定边距
- 当javascript改变两个标签的宽度时,它们会自动改变位置
- Bootstrap popover以分辨率改变位置
- JavaScript:检测窗口开始改变位置的时刻
- 改变位置引导-wysihtml5
- 如何在动画完成后随机改变位置
- Jquery背景改变位置的步骤
- LeafletJS:获取一个特定的标记来改变位置
- 相位定时器不改变位置对象,只改变位置值
- 改变位置.在重新加载页面时散列
- 在D3散点图中,点在放大时改变位置
- 如何改变位置和z-索引使用jquery(动画)
- Gmaps.js - zoomControlOpt不会改变位置或样式
- JQuery根据位置显示元素——如果父元素不在屏幕上,工具提示应该改变位置
- 改变位置.在unbeforeunload上散列
- 离子改变位置不起作用
- 不改变位置的Angular路由
- 当使用setPosition改变位置时,谷歌标记消失
- 如果高度超过100px,改变位置