在缩放/拖动时缩放/重绘 d3.js 网格线
Scale / Redraw d3.js gridlines on zoom / drag
我昨天才开始使用 d3.js,但在完成我的工作时遇到了一些问题。
现在我创建了一个有两个 y 轴的图表,每个显示一些值,一个 x 轴显示日期。
点击 y 轴上的值,我会显示相应的水平网格线。
我的问题是,在放大或缩小或拖动时,网格线(水平和垂直)无法根据轴值正确缩放,它们根本就不动。
我今天下午进行了很多搜索,找到了一些如何操作的示例,但其中 none 似乎可以使用我已有的代码。
我想,逻辑应该添加到缩放行为,但我不确定
// x axis gridlines
function make_x_gridlines() {
return d3.axisBottom(x)
.ticks(5)
}
// add the X gridlines
let xGrid = svg.append("g")
.attr('class', 'grid')
.attr("id", "grid")
.attr("transform", "translate(0," + height + ")")
.call(make_x_gridlines()
.tickSize(-height)
.tickFormat("")
)
//zoom behavior
function zoomed() {
.. some behavior ..
//redraw gridlines here?
.. some behavior ..
}
完整内容请参阅this fiddle。
我将第二个 y 轴(右)称为 zAxis,即使它不是 z 轴。
非常感谢您的帮助。
缩放时轴正在工作。那是因为,在函数 zoomed()
中,您正在更新比例。
所以为了使网格缩放,你只需要更新它的比例。将此代码放入函数 zoomed()
中,它应该可以工作。
xGrid.call(
d3.axisBottom(x)
.scale(d3.event.transform.rescaleX(x))
.ticks(5)
.tickSize(-height)
.tickFormat("")
)
现在您只需将此比例更新复制到所有其他网格。对不起,我不能给你一个完整的答案,但我现在没有太多时间。
现在,在我看来,你不应该拥有 make_gridlines()
功能,因为它真的很简单,当你在不同的地方进行大量更新时,它会让我感到困惑。
所以,不是调用 make_gridlines()
,而是调用 d3.axisBottom(x).ticks(5)
。
(注意我是d3和js的新手,所以我根据我的一点经验和知识推荐这个)
我昨天才开始使用 d3.js,但在完成我的工作时遇到了一些问题。
现在我创建了一个有两个 y 轴的图表,每个显示一些值,一个 x 轴显示日期。
点击 y 轴上的值,我会显示相应的水平网格线。
我的问题是,在放大或缩小或拖动时,网格线(水平和垂直)无法根据轴值正确缩放,它们根本就不动。
我今天下午进行了很多搜索,找到了一些如何操作的示例,但其中 none 似乎可以使用我已有的代码。
我想,逻辑应该添加到缩放行为,但我不确定
// x axis gridlines
function make_x_gridlines() {
return d3.axisBottom(x)
.ticks(5)
}
// add the X gridlines
let xGrid = svg.append("g")
.attr('class', 'grid')
.attr("id", "grid")
.attr("transform", "translate(0," + height + ")")
.call(make_x_gridlines()
.tickSize(-height)
.tickFormat("")
)
//zoom behavior
function zoomed() {
.. some behavior ..
//redraw gridlines here?
.. some behavior ..
}
完整内容请参阅this fiddle。
我将第二个 y 轴(右)称为 zAxis,即使它不是 z 轴。
非常感谢您的帮助。
缩放时轴正在工作。那是因为,在函数 zoomed()
中,您正在更新比例。
所以为了使网格缩放,你只需要更新它的比例。将此代码放入函数 zoomed()
中,它应该可以工作。
xGrid.call(
d3.axisBottom(x)
.scale(d3.event.transform.rescaleX(x))
.ticks(5)
.tickSize(-height)
.tickFormat("")
)
现在您只需将此比例更新复制到所有其他网格。对不起,我不能给你一个完整的答案,但我现在没有太多时间。
现在,在我看来,你不应该拥有 make_gridlines()
功能,因为它真的很简单,当你在不同的地方进行大量更新时,它会让我感到困惑。
所以,不是调用 make_gridlines()
,而是调用 d3.axisBottom(x).ticks(5)
。
(注意我是d3和js的新手,所以我根据我的一点经验和知识推荐这个)