【问题标题】:Update data while zooming with D3 and React使用 D3 和 React 缩放时更新数据
【发布时间】:2015-10-05 14:34:12
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: javascript d3.js reactjs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 2017-03-01
      • 2021-05-28
      • 2012-11-09
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多