javascript - 使用 D3 和 React 缩放时更新数据

标签 javascript d3.js reactjs

我正在使用 D3 和 React 绘制具有缩放和平移行为的简单折线图。 我需要使数据相对于实际缩放的第一个值。

例如,如果我的数据集 Y 值为 [0, 2%, 3% 和 4%],并且我当前正在查看最后 3 个值,则它应该绘制 [0, 1.02%, 2.04%]。

我尝试保留原始数据集的副本并在缩放时更新 viewportDataset:

_onZoom (zoom) {
  let state = this.state,
      data = state.data,
      viewportData = [],
      filteredData,
      y = state.y,
      x = state.x,
      minDate = d3.min(data, d => d.date),
      maxDate = d3.max(data, d => d.date),
      xZoom, yExtent, yDiff;

  if (x.domain()[0] < minDate) {
    xZoom = zoom.translate()[0] - x(minDate) + x.range()[0];
    zoom.translate([xZoom, 0]);
  }

  else if (x.domain()[1] > maxDate) {
    xZoom = zoom.translate()[0] - x(maxDate) + x.range()[1];
    zoom.translate([xZoom, 0]);
  }

  filteredData = data.filter((d, i) => {
    if ((d.date >= x.domain()[0]) && (d.date <= x.domain()[1])) {
      return [d.daily, d.accumulated, d.dailyRelative];
    }
  });

  let factor = filteredData[0].dailyRelative;

  filteredData.map(d => {
    d.dailyRelative = d.dailyRelative / factor;
    viewportData.push(d);
  });

  y.domain(d3.extent(filteredData, d => d.dailyRelative));

  this.setState({ y, viewportData });
}

React 在设置新的 viewportData 和 Y 比例后,调用我的 updateChart 图表函数:

_updateChart () {
   /* ... */
   let line = chart
    .select('g.data')
    .selectAll('path.line')
    .data([state.viewportData]);

   line.attr('d', d => this._line(d));

   line.enter().append('path.line')
     .attr('d', d => this._line(d));

   line.exit().remove();
}

这个方法行不通。 我认为我没有正确执行更新模式。 我如何实现这种行为? 我将我的工作图表移植到笔中,heres the code

最佳答案

我最终在缩放事件后更新了数据,呃。

不完全是我正在寻找的行为,但它正在工作。

_onZoomend () {
  /* ... */
  chart.select('g.data path.line')
    .transition()
    .attr('d', d => this._line(d, factor));
},

关于javascript - 使用 D3 和 React 缩放时更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951198/

相关文章:

javascript - jquery .on() 触发事件两次

angular - d3-cloud 的类型

javascript - 检测鼠标按下时单击的元素

javascript - 未定义的属性 'map' (JavaScript)

javascript - 如何从本地文件返回 React 中的 JSON 数组并使其映射到我的所有项目?

javascript - 捕获 AWS S3 获取对象流错误 Node.js

Javascript 移动重定向不起作用

javascript - 用 jQuery/prototype 解析 onclick ="setLocation(...)"

reactjs - 何时使用 Redux-saga/Redux thunk,何时不使用?

reactjs - 从 Create React App 注册 Service Worker 时如何更新页面