首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React D3:如何使用react d3-工具提示和react d3-缩放相同的图表?

React D3:如何使用react d3-工具提示和react d3-缩放相同的图表?
EN

Stack Overflow用户
提问于 2016-06-01 05:21:11
回答 1查看 1.5K关注 0票数 1

我试图使用React d3 (www.reactd3.org)创建一个具有工具提示和缩放组件的线条图。

但是,我不知道如何在一起使用这两个组件。

我能够创建一个简单的LineChart

代码语言:javascript
复制
import {LineChart} from 'react-d3-basic';
import {LineTooltip, SimpleTooltip} from 'react-d3-tooltip';
import {LineZoom} from 'react-d3-zoom';

render() {
  var viewCountData = [
    {
      "date": new Date(2016, 5, 29),
      "Object1":11,
      "Object2":13,
      "Object3":16
    },
    {
      "date": new Date(2016, 5, 30),
      "Object1":23,
      "Object2":17,
      "Object3":15
    }
  ];
  var chartSeries = [
    {field: "Object1"},
    {field: "Object2"},
    {field: "Object3"}
  ];
  var x = function(d) {
    return d.date;
  };

  return (
    <LineChart
      data= {viewCountData}
      chartSeries= {chartSeries}
      x= {x}>
    </LineChart>
  );
}

并通过将LineChart替换为LineTooltip添加工具提示

代码语言:javascript
复制
<LineTooltip
  data= {viewCountData}
  chartSeries= {chartSeries}
  x= {x}>
  <SimpleTooltip />
</LineTooltip>

但是,我不知道如何也使用LineZoom。我试着在LineTooltip里面嵌套

代码语言:javascript
复制
<LineTooltip ...>
  <LineZoom ...>
  </LineZoom>
</LineTooltip>

同时在LineChart内部同时拥有两个

代码语言:javascript
复制
<LineChart ...>
  <LineTooltip ...>
  </LineTooltip>
  <LineZoom ...>
  </LineZoom>
</LineChart>

但两者都不起作用。任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-06-24 21:00:01

我基本上修改了变焦线的例子,以包括voroni实用程序。一些快速粗略的测试显示,在兼容性方面还有工作要做,但这应该对您有所帮助。

代码语言:javascript
复制
import React, {PropTypes} from 'react';
// import d3 from 'd3';
// import {LineZoom} from 'react-d3-zoom';
import {
  Chart,
} from 'react-d3-core';
import {
  LineChart,
  series
} from 'react-d3-basic';
import ZoomSet from 'react-d3-zoom/lib/inherit';
import ZoomFocus from 'react-d3-zoom/lib/utils/zoom_focus';
import CommonProps from 'react-d3-zoom/lib/commonProps';


// Tooltip
import Voronoi from 'react-d3-tooltip/lib/utils/voronoi';

代码语言:javascript
复制
export default class Line extends ZoomSet {
  constructor(props) {
    super(props);

    const {
      contentTooltip,
      margins,
      width,
      height
    } = this.props;

    this.zoomed = this.zoomed.bind(this);
    this.mkXDomain();
    this.mkYDomain();

    this.state = {
      xDomainSet: this.setXDomain,
      yDomainSet: this.setYDomain,
      onZoom: this.zoomed,
      d3EventSet: null,
      xRange: this.props.xRange ||
        [0, width - margins.left - margins.right],
      yRange: this.props.yRange ||
        [height - margins.top - margins.bottom, 0],
      xRangeRoundBands: this.props.xRangeRoundBands || {
        interval: [0, width - margins.left - margins.right],
        padding: 1
      },
      zoomType: 'line'
    };

    this.mkXScale(this.setXDomain);
    this.mkYScale(this.setYDomain);

    this.state = Object.assign(this.state, {
      xScaleSet: this.setXScale,
      yScaleSet: this.setYScale
    });
  }

  static defaultProps = CommonProps


  render() {
    const {
      xDomainSet,
      yDomainSet,
      contentTooltip
    } = this.state;

    const voroni = (
      <Voronoi
        {...this.state}
        {...this.props}
        // onMouseOver= {(...args)=>console.log(args)}
        // onMouseOut= {(...args)=>console.log(args)}
        />
    );

    const focus = <ZoomFocus {...this.props} />;
    // console.log('state', this.state, Chart);
    return (
      <div>
        <Chart {...this.props} {...this.state}>
          <LineChart
            {...this.props}
            {...this.state}
            xDomain={xDomainSet} yDomain={yDomainSet}
            showZoom/>
          {focus}
          {voroni}
        </Chart>
      </div>
    );
  }
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37560025

复制
相关文章

相似问题

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