D3.js D3js多段线轴缩放图表
我正在尝试创建一个具有多段线x轴的可缩放图表。如果I没有多段线轴,则一切正常。但是,当使用多段线轴时,平移(和缩放)非常扭曲。如果拖动图表进行平移,将看到点和x轴扭曲。该示例使用默认的D3js缩放行为。如有任何关于平滑平移/缩放的建议,将不胜感激 我使用转换来定位元素,因为我在指定cx和cy值时遇到了一些问题(特别是在向平移或缩放图表添加新数据时) 以下是缩放功能:D3.js D3js多段线轴缩放图表,d3.js,D3.js,我正在尝试创建一个具有多段线x轴的可缩放图表。如果I没有多段线轴,则一切正常。但是,当使用多段线轴时,平移(和缩放)非常扭曲。如果拖动图表进行平移,将看到点和x轴扭曲。该示例使用默认的D3js缩放行为。如有任何关于平滑平移/缩放的建议,将不胜感激 我使用转换来定位元素,因为我在指定cx和cy值时遇到了一些问题(特别是在向平移或缩放图表添加新数据时) 以下是缩放功能: var onZoom = function () { if (d3.event.scale ==
var onZoom = function () {
if (d3.event.scale == 1) { //panning
} else { //zooming
// don't scale points and lines
graph.selectAll(".point")
.attr("r", 10 / d3.event.scale)
.attr("stroke-width", 1 / d3.event.scale);
}
graph.selectAll(".point")
.attr("transform", function (d) { return "translate(" + xMap(d) + "," + yMap(d) + ")scale(" + d3.event.scale + ")"; });
graph.select(".xAxis.axis").call(xAxis);
graph.select(".yAxis.axis").call(yAxis);
};
请参见示例:我了解了如何在不失真的情况下平移/缩放多段线轴 我在阅读这个问题的公认答案时发现了这一点:“d3缩放行为对象通过更改其域来修改缩放。您可以通过更改缩放范围来获得类似效果,因为重要的部分是更改域和范围之间的关系。” 因此,我修改了缩放行为以不更新x域,并更新缩放行为中的范围:
// update range in zoom event - leave the domain as is
x.range(d3.range(xTicks.length)
.map(function (d) { return (d * xRangeDelta) * d3.event.scale + d3.event.translate[0]; }))
graph.selectAll(".point")
.attr("transform", function (d) { return "translate(" + xMap(d) + "," + yMap(d) + ")scale(" + d3.event.scale + ")"; });
graph.select(".xAxis.axis").call(xAxis);
graph.select(".yAxis.axis").call(yAxis);
这是一个更新的提琴:。我发现了如何在不失真的情况下平移/缩放多段线轴 我在阅读这个问题的公认答案时发现了这一点:“d3缩放行为对象通过更改其域来修改缩放。您可以通过更改缩放范围来获得类似效果,因为重要的部分是更改域和范围之间的关系。” 因此,我修改了缩放行为以不更新x域,并更新缩放行为中的范围:
// update range in zoom event - leave the domain as is
x.range(d3.range(xTicks.length)
.map(function (d) { return (d * xRangeDelta) * d3.event.scale + d3.event.translate[0]; }))
graph.selectAll(".point")
.attr("transform", function (d) { return "translate(" + xMap(d) + "," + yMap(d) + ")scale(" + d3.event.scale + ")"; });
graph.select(".xAxis.axis").call(xAxis);
graph.select(".yAxis.axis").call(yAxis);
这是一个更新的提琴: