标签: d3fc

d3 同步 2 个单独的缩放行为

我有以下 d3/d3fc 图表

https://codepen.io/parliament718/pen/BaNQPXx

该图表具有主区域的缩放行为和 y 轴的单独缩放行为。可以拖动 y 轴以重新缩放。

我无法解决的问题是,在拖动 y 轴以重新缩放然后平移图表后,图表中有一个“跳跃”。

显然,这 2 个缩放行为有断开连接,需要同步,但我正在绞尽脑汁试图解决这个问题。

const mainZoom = zoom()
    .on('zoom', () => {
       xScale.domain(t.rescaleX(x2).domain());
       yScale.domain(t.rescaleY(y2).domain());
    });

const yAxisZoom = zoom()
    .on('zoom', () => {
        const t = event.transform;
        yScale.domain(t.rescaleY(y2).domain());
        render();
    });

const yAxisDrag = drag()
    .on('drag', (args) => {
        const factor = Math.pow(2, -event.dy * 0.01);
        plotArea.call(yAxisZoom.scaleBy, factor);
    });
Run Code Online (Sandbox Code Playgroud)

所需的行为是缩放、平移和/或重新缩放轴,以始终从上一个操作完成的位置应用变换,而不会出现任何“跳跃”。

d3.js d3fc

25
推荐指数
3
解决办法
996
查看次数

d3-drag - 在 d3v5 中拖动重新调整 y 轴

当用户沿轴拖动时,我试图实现重新缩放 d3fc 笛卡尔图的效果。

https://codepen.io/parliament718/pen/BaNQPXx

这是在 d3v5 中,我使用 d3-zoom 使用d3.event.transform. 但是,在 d3-drag 中没有,d3.event.transform所以我不明白仅使用 d3-drag 提供的鼠标坐标的等效逻辑是什么。

const zoom = d3.zoom()
   .on('zoom', () => {
       const t = d3.event.transform;
       x.domain(t.rescaleX(x2).domain());
       y.domain(t.rescaleY(y2).domain());
       render();
   });

plot.call(zoom);

//What is the equivelant drag action to rescale?
const yAxisDrag = d3.drag()                 
    .on('end', (args) => {
       var t = d3.zoomTransform(plot.node());

       //zoom.translateBy(plot,d3.event.dx/t.k,d3.event.dy/t.k);
       //How can I use zoom.scaleBy() here instead?
    });
Run Code Online (Sandbox Code Playgroud)

d3.js d3fc

5
推荐指数
1
解决办法
382
查看次数

标签 统计

d3.js ×2

d3fc ×2