d3.js 重新缩放后获取新的域值
d3.js get new domain values after rescale
我尝试在重新缩放轴后获取新的轴值。
我试图从 y.domain()
获取它们作为回答 但返回的值是初始值。
那么我做错了什么?
相关代码:
function zoomed() {
for(let i = 0; i < ys.length; i++){
yAxes[i].call(
d3.axisLeft(ys[i])
.scale(d3.event.transform.rescaleY(ys[i]))
)
}
//Now I need the new values
console.log(ys[0].domain()) //returns [0, 10] which are my initial domain values for this axis.
}
缩放后,我在屏幕上显示的值大于 0 且小于 10。
那么如何让我的域获得新的最小值和最大值?
Here 是一个 fiddle 我的代码的旧版本,它具有完全相同的行为(请参阅 zoomed()
函数)。
也许我误解了域是什么以及它是如何工作的,我需要的是我的轴的新的最大值和最小值。
我的回答基于 fiddle 中的这段代码:
function zoomed() {
let center = getBoundingBoxCenterX(rect);
let chartsWidth = (2 * center) * d3.event.transform.k;
d3.event.transform.x = center - chartsWidth / 2;
xAxis.call(d3.axisBottom(x).scale(d3.event.transform.rescaleX(x)));
yAxis.call(d3.axisLeft(y).scale(d3.event.transform.rescaleY(y)));
zAxis.call(d3.axisRight(z).scale(d3.event.transform.rescaleY(z)));
//here i need the new values
console.log(y.domain()) //returns [0,6]
编辑
你可以这样得到坐标轴刻度:
let leftAxis = d3.axisLeft(y).scale(d3.event.transform.rescaleY(y));
console.log('new domain values', leftAxis.scale().domain())
我有一个可以正常工作的 fiddle 版本:https://jsfiddle.net/aj5sLz5u/
我尝试在重新缩放轴后获取新的轴值。
我试图从 y.domain()
获取它们作为回答
那么我做错了什么?
相关代码:
function zoomed() {
for(let i = 0; i < ys.length; i++){
yAxes[i].call(
d3.axisLeft(ys[i])
.scale(d3.event.transform.rescaleY(ys[i]))
)
}
//Now I need the new values
console.log(ys[0].domain()) //returns [0, 10] which are my initial domain values for this axis.
}
缩放后,我在屏幕上显示的值大于 0 且小于 10。 那么如何让我的域获得新的最小值和最大值?
Here 是一个 fiddle 我的代码的旧版本,它具有完全相同的行为(请参阅 zoomed()
函数)。
也许我误解了域是什么以及它是如何工作的,我需要的是我的轴的新的最大值和最小值。
我的回答基于 fiddle 中的这段代码:
function zoomed() {
let center = getBoundingBoxCenterX(rect);
let chartsWidth = (2 * center) * d3.event.transform.k;
d3.event.transform.x = center - chartsWidth / 2;
xAxis.call(d3.axisBottom(x).scale(d3.event.transform.rescaleX(x)));
yAxis.call(d3.axisLeft(y).scale(d3.event.transform.rescaleY(y)));
zAxis.call(d3.axisRight(z).scale(d3.event.transform.rescaleY(z)));
//here i need the new values
console.log(y.domain()) //returns [0,6]
编辑
你可以这样得到坐标轴刻度:
let leftAxis = d3.axisLeft(y).scale(d3.event.transform.rescaleY(y));
console.log('new domain values', leftAxis.scale().domain())
我有一个可以正常工作的 fiddle 版本:https://jsfiddle.net/aj5sLz5u/