首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D3-在d3v5中具有拖动的y轴

D3-在d3v5中具有拖动的y轴
EN

Stack Overflow用户
提问于 2020-02-22 19:04:11
回答 1查看 748关注 0票数 5

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

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

这是在d3v5,我使用d3缩放,用d3.event.transform重新缩放轴。但是,在d3-拖动中没有d3.event.transform,所以我不明白什么是等价物逻辑使用d3-拖动提供的鼠标坐标。

代码语言:javascript
复制
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?
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-01 06:59:38

您可以创建另一个只更改Y域的缩放行为。然后,在拖动处理程序中,使用基于拖动事件的增量Y的缩放因子在绘图区域调用新行为的scaleBy

代码语言:javascript
复制
const yAxisZoom = d3.zoom()
  .on('zoom', () => {
    y.domain(d3.event.transform.rescaleY(y2).domain());
    render();
  });

const yAxisDrag = d3.drag()
  .on('drag', () => {
    const factor = Math.pow(2, -d3.event.dy * 0.01);
    d3.select('#zoom-chart .plot-area').call(yAxisZoom.scaleBy, factor);
  });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60355728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档