【发布时间】:2018-01-23 18:02:12
【问题描述】:
我使用 D3 v4 创建了一个图表,它允许 x 轴平移和缩放。我在平移和缩放时以不同方式更新图表,以减少我们重新生成图表的次数。
至于平移
当用户向左或向右平移时,我只需更新transform 属性:
path.attr("transform", d3.event.transform).
效果很好。
至于缩放
当用户缩放时,我会重新缩放域并重新生成图形,以实现所需的行为:
t = d3.event.transform;
xScale.domain(t.rescaleX(x2).domain()); //update xScale domain
xAxis =d3.axisBottom(xScale)...
focus.select(".axis--x").call(xAxis);
usageAreaPath.attr("d", area); //area being a reference to the generator
usageLinePath.attr('d',line); //line being the name of the generator
问题是,执行缩放后平移或平移后缩放会导致图形跳转到不同的缩放级别。我不确定我做错了什么,或者如何在缩放/平移后重新绑定比例以更新正确的比例,但我在下面附上了一个 JSBIN:
【问题讨论】:
-
在 D3 中,缩放处理平移。所以,你只需要
.on("zoom", redraw);。 -
@GerardoFurtado 如果我通过重绘处理平移,我将重新生成图形。我不想重新生成图形,我只想根据平移平移图形,即
usageAreaPath.attr("transform", d3.event.transform);但如果有缩放,我想使用重绘内容。即usageAreaPath.attr("d", area); usageLinePath.attr('d',line); -
@GerardoFurtado 很抱歉让您感到困惑,我的问题清楚吗?
-
我们应该如何在你的 jsbin 中看到问题?我们怎样才能平移?我们如何缩放?
-
首次加载图表时,可以通过上下滚动鼠标滚轮进行上下缩放。
标签: javascript d3.js