以反应原生方式绘制d3轴

时间:2018-06-13 08:50:27

标签: javascript react-native d3.js

我想用

axis = d3.axisLeft(scale)

在Shape组件中

<Shape d = {axis()} />

如果未设置渲染上下文,则d3-shape中的形状组件通常会返回路径,这在React-Native中就是这种情况

有可能以某种方式获得反应节点上下文的访问权限吗?路径不是可行的选项,因为轴将是一组项目,而不是路径

1 个答案:

答案 0 :(得分:5)

我一直在研究-我的理解是不可能同时使用d3轴和本机ART形状。

您可以将d3-shape与ART Shapes一起使用,因为d3-shape函数返回由ART Shape解释的字符串。这些字符串在这里https://css-tricks.com/svg-path-syntax-illustrated-guide/

中有很好的解释

所以我一直在使用css-tricks文章作为参考,并使用d3比例画线。

这是基本方法。

1)获得您想要滴答的数据点数组。

2)使用图形中的d3-scale函数将数据点数组转换为Surface上的该位置

scalePoints = () => {
    var { xScale, dataPoints } = this.props;
    this.points = [];
    for (var i = 0; i <= dataPoints.length - 1; i++) {
        this.points.push(xScale(dataPoints[i]));
    }
};

3),则需要使用字符串插值和循环来创建d字符串(请参见css-tricks文章),如下所示:

getPath = () => {
    var { curveOffsetTop, outerTick, innerTick } = this.props;
    var path = `M0,${curveOffsetTop}`;
    for (var i = 0; i <= this.points.length - 1; i++) {
        path = path + `H${this.points[i]}`;
        path = path + `v${outerTick}`;
        path = path + `v-${outerTick}`;
        path = path + `v-${innerTick}`;
        path = path + `v${innerTick}`;
    }
    return { path: path };
};

4)像这样将这条线放入您的形状

<Shape
    {...other}
    d={this.getPath().path}
    stroke="#000"
/>

这就是我一直在做的事情。

https://github.com/goughjo02/React-Native-Animations-with-PanResponder/blob/master/components/linechart/xAxis.js