美文网首页React Native实践React-Native技术栈react native
如何在react-native中实现饼图和环形图——victor

如何在react-native中实现饼图和环形图——victor

作者: mytac | 来源:发表于2018-01-09 09:57 被阅读1089次

    查看github原文
    如有错误请在评论区指出~

    前言。。和一些关于repo起名的建议

    在github上找了很多图表类的插件,大多都是直方图之类的显示完好,到了饼图都差强人意。因为react-native版本更新的快,用不同的版本必须适配不同的第三方库,所以很多repo维护的都比较慢(或者类似于react-native-chart就直接不更新了),如果你非得用某个第三方库,在你当前版本不适合的情况下,要么换库,要么就降级react-native版本。这导致在开发上非常棘手,因为是团队项目,不可能去降级react-native版本的啊,在找适合的第三方库的过程中也是一度陷入了绝望之中。直到在react-native-chart的readme中发现了victory-native。这里,我不得不吐槽一下他的repo名,victory什么鬼啊,没用过你家react-victory的人真心不知道你是干啥的。

    这啥子命名哦!摔!错误的命名示例

    说句题外话,如果自己有repo的小伙伴一定要重视你的项目命名,最好把它的功能用命名的方式描述出来,然后详细写下description,这样才能提高star数,(来自一个刚刚参透这些道理并且写了不少repo,star数扔为0的老阿姨的忠告)。如果你经常从github上找三方库你就会发现,star数很高的项目基本上都是文档详尽,description写的很清楚的一些项目。拿react-native-chart举例,虽然也是个不错的repo,但已经不能满足当前的react-native版本了,比起victory-native还是有很多不足的地方,但是他的star数要比victory-native高一倍。起个名字还是关系着命运啊,就像王胜利王.我会做图表一样,你会找谁做图表呢。。

    react-native-chart,想有star就该这样命名

    先看效果图

    demo

    安装victory-native

    首先,先要安装react-native-svg,对应你的react-native版本号进行安装。

    react-native-svg >= 3.2.0 only supports react-native >= 0.29.0
    react-native-svg >= 4.2.0 only supports react-native >= 0.32.0
    react-native-svg >= 4.3.0 only supports react-native >= 0.33.0
    react-native-svg >= 4.4.0 only supports react-native >= 0.38.0 and react >= 15.4.0
    react-native-svg >= 4.5.0 only supports react-native >= 0.40.0 and react >= 15.4.0
    react-native-svg >= 5.1.8 only supports react-native >= 0.44.0 and react == 16.0.0-alpha.6
    react-native-svg >= 5.2.0 only supports react-native >= 0.45.0 and react == 16.0.0-alpha.12
    react-native-svg >= 5.3.0 only supports react-native >= 0.46.0 and react == 16.0.0-alpha.12
    react-native-svg >= 5.4.1 only supports react-native >= 0.47.0 and react == 16.0.0-alpha.12
    react-native-svg >= 5.5.1 only supports react-native >= 0.50.0 and react == 16.0.0
    

    之后link一下

    react-native link react-native-svg
    

    重新打包安装

    react-native run-ios
    // or
    react-native run-android
    

    然后安装victory-native

    yarn add victory-native
    

    使用

    先引入,这里只讨论饼图,不过很多参数都是共同的,其他的见官方文档

    import {
      VictoryPie,
      VictoryLegend,
    } from 'victory-native';
    

    使用组件

    <VictoryPie
                padding={{ top: 0, left: 0 }}
                colorScale={colorScale}
                data={[
                  { x: '净值', y: 35 },
                  { x: '已用', y: 40 },
                  { x: '可用', y: 55 },
                  { x: '总盈亏', y: 55 },
                ]}
                innerRadius={px2dp(75)}
                height={256}
                width={256}
                labels={() => ''}
              />
    

    参数

    这里写的参数只是基础的几个,想要进行扩展去看下官方文档,写的非常详尽。

    data

    类似于json形式,x代表数据的类型,y是数据的值;也可以是纯数组的形式。

    colorScale

    这个参数指每个类型的颜色,是一组数组,顺序按照data中给出的顺序。如:

    const colorScale = ['tomato', 'orange', 'gold', 'navy'];
    

    innerRadius

    指的是圆形中间的圆半径大小。如果设置为0就是一个纯饼图。

    height,width

    设置整个svg的大小,不设置默认为填充父组件。

    labels

    标签名,将data进行处理后渲染到图中。因为需求中不显示标签名,所以设置为()=>{}

    <VictoryPie
      data={sampleData}
      labels={(d) => `y: ${d.y}`}
    />
    

    padding

    内边距大小。这个属性默认并不为0,所以会在分辨率不同的设备上显示不一,建议设置为0,然后在整个组件外部包个View进行显示。

    图例

    <VictoryLegend
                  padding={{ top: 0, left: 0 }}
                  title=""
                  orientation="vertical"
                  style={{ labels: { fontSize: sizes.f2 } }}
                  gutter={px2dp(25)}
                  data={[
                    {
                      name: '净值',
                      symbol: { fill: 'tomato', type: 'square' },
                    },
                    {
                      name: '已用',
                      symbol: { fill: 'orange', type: 'square' },
                    },
                    {
                      name: '可用',
                      symbol: { fill: 'gold', type: 'square' },
                    },
                    { name: '总盈亏', symbol: { fill: 'navy', type: 'square' } },
                  ]}
                  width={px2dp(150)}
                />
    

    参数

    title

    整个图例的名字。如title='图例'

    data

    类似于json的数据结构,包含图例名(name),和图例样式(type)以及图例颜色(fill)。

    gutter

    指的是每条图例之间的间距。

    orientation

    图例的排列方式。横排或纵排。

    参考资料

    1. react-native-svg repo 地址
    2. victory-native repo 地址
    3. victory官方文档

    相关文章

      网友评论

      • 嗯_881a:为什么我的显示的也是只有右下角部分呢?
      • 每天都有新的太阳:我的为何只显示右下角啊?环境是 "react-native": "0.48", "react-native-svg": "^5.4.1",
        mytac:"react-native-svg,5.5.1试试。实在不对去搜issue
      • 一言不合拔萝卜:才发现这个“王胜利”,谢谢介绍。
        mytac:哈哈哈我也是找了很多才发现的,居然起了个这种名
      • 549ee585aebd:请问这个有触摸事件吗?
        还是和react-native-pathjs-charts一样没有动画效果以及触摸事件?
        549ee585aebd:@张君卓 你试过在饼状图上面加每个区域对应的线吗?类似支付宝账单那种饼状图
        mytac:@厉害了我的锅_a183 嗯,这个库功能还是挺全的
        549ee585aebd:原谅我,刚刚看了文档,可以的:sweat:
      • 3c0fc0245e87:用到VictoryPie时,环形图只展示右下角部分,如何处理?
        mytac:@兰兰他山之石 react-native-svg >= 5.1.8
        3c0fc0245e87:@张君卓 我用的0.44.2版本的rn
        mytac:版本不对,看下你的rn版本

      本文标题:如何在react-native中实现饼图和环形图——victor

      本文链接:https://www.haomeiwen.com/subject/gskwnxtx.html