【问题标题】:Scaling the y axis up, while scaling the x axis down with D3.js向上缩放 y 轴,同时使用 D3.js 向下缩放 x 轴
【发布时间】:2021-06-07 20:27:49
【问题描述】:

我正在构建一个交互式图形,以显示带有 D3.js 的 javascript 中 1/r 函数的比例不变性。为此,我需要将图形在 x 方向缩放 k 倍,在 y 方向缩放 1/k 倍。为此,我可以访问 d3.event.transform 并手动设置 y 轴的 k 因子,如下所示:

var newxScale = d3.event.transform.rescaleX(xScale)
// this does not feel good, neither does it really work
d3.event.transform.k = 1/ d3.event.transform.k
var newyScale = d3.event.transform.rescaleY(yScale)
d3.event.transform.k = 1/ d3.event.transform.k

如小提琴所示:https://jsfiddle.net/od9pcnut/44/

更改 d3.event.transform 中的变量感觉非常错误,并且会扰乱鼠标位置周围的缩放(当我缩放图形时,绘制的线会向某个方向漂移)。如何在保留鼠标位置缩放功能的同时,让比例尺在不同方向按不同因素进行缩放?

【问题讨论】:

    标签: javascript svg d3.js


    【解决方案1】:

    d3.event.transformd3.zoomIdentity 的一个实例。您可以构建一个新的缩放标识并使用它重新缩放 X / Y 比例:

    const {x, y, k} = d3.event.transform; 
    
    const newxScale = d3.zoomIdentity
      .translate(x, y)
      .scale(k)
      .rescaleX(xScale);
    
    const newyScale = d3.zoomIdentity
      .translate(x, y)
      .scale(1 / k)
      .rescaleY(yScale);
    

    【讨论】:

    • 感谢您的回复!这将是一种减轻 d3.event.transform 中重新分配的方法,据我所知,其条目应被视为只读。最后,您提出的代码并不能真正解决缩放时 y 轴漂移的问题。 (我确实用你的代码更新了小提琴,因为这可能是我目前所做的最好的方式......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多