图表库G2的调研

这把我C 2020-12-11 16:08:02 7312

图表库G2的调研

最近要做一个监控的功能,设计到很多花里胡哨的图标,老大让调研一下用那些图表库。于是调研了一番主流的图表库,echart,G2,D3。。。
最后,身为打工人的我被大佬指定用G2,没办法。之前用的都是echart,学一下吧。

官方的介绍

G2 是一套基于图形语法理论的可视化底层引擎,以数据驱动,提供图形语法与交互语法,具有高度的易用性和扩展性。使用 G2,你可以无需关注图表各种繁琐的实现细节,一条语句即可使用 Canvas 或 SVG 构建出各种各样的可交互的统计图表。

该库的特征

  • 💯 完善的图形语法:数据到图形的映射,能够绘制出所有的图表。
  • 🤩 全新的交互语法:通过触发和反馈机制可以组合出各种交互行为,对数据进行探索。
  • 🦍 强大的 View 模块:可支持开发个性化的数据多维分析图形。
  • 👬 双引擎渲染:Canvas 或 SVG 任意切换。
  • 💄 可视化组件体系:面向交互、体验优雅。
  • 🛡 全面拥抱 TypeScript:提供完整的类型定义文件。

其中两个东西比较重要,一个是图形语言, 一个是交互语法

图形语法

图形语法是个很复杂的东西,包含的面很多,如:数据 Data,图形属性 Attribute,几何标记 Geometry,度量 Scale,坐标系 Coordinate,可视化组件 Component,分面 Facet。用官方的话就是 G2 所构建出的图表是由一系列独立的图形语法元素组合而成的,包括数据、图形属性、几何标记、度量、坐标系、可视化组件、分面等

抛开那些复杂难以理解的术语,我们可将图形语法简单理解为,图形语法是把一个图表拆分成,点,线,面,角度,数据,坐标系等多个维度组成一个图形。我们要制作一个图表,只要将其中的点,线,面,确定了,分别设置出来,那么一个图表就完成了。这个思路和echart的配置大相径庭,差别很大。

交互语法

在 G2 中,一个交互行为是由一系列交互环节组成,而每一个交互环节又由以下两部分组成:

  • 触发,交互环节的触发,包括触发对象和触发事件
  • 反馈,交互环节的结果

先看一个例子

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>曲线折线图</title>
</head>

<body>
  <div id="container" />
  <script src="https://gw.alipayobjects.com/os/lib/antv/g2/4.1.1/dist/g2.min.js"></script>

  <script>
    const data = [
      { month: 'Jan', city: 'Tokyo', temperature: 7 },
      { month: 'Jan', city: 'London', temperature: 3.9 },
      { month: 'Feb', city: 'Tokyo', temperature: 6.9 },
      { month: 'Feb', city: 'London', temperature: 4.2 },
      { month: 'Mar', city: 'Tokyo', temperature: 9.5 },
      { month: 'Mar', city: 'London', temperature: 5.7 },
      { month: 'Apr', city: 'Tokyo', temperature: 14.5 },
      { month: 'Apr', city: 'London', temperature: 8.5 },
      { month: 'May', city: 'Tokyo', temperature: 18.4 },
      { month: 'May', city: 'London', temperature: 11.9 },
      { month: 'Jun', city: 'Tokyo', temperature: 21.5 },
      { month: 'Jun', city: 'London', temperature: 15.2 },
      { month: 'Jul', city: 'Tokyo', temperature: 25.2 },
      { month: 'Jul', city: 'London', temperature: 17 },
      { month: 'Aug', city: 'Tokyo', temperature: 26.5 },
      { month: 'Aug', city: 'London', temperature: 16.6 },
      { month: 'Sep', city: 'Tokyo', temperature: 23.3 },
      { month: 'Sep', city: 'London', temperature: 14.2 },
      { month: 'Oct', city: 'Tokyo', temperature: 18.3 },
      { month: 'Oct', city: 'London', temperature: 10.3 },
      { month: 'Nov', city: 'Tokyo', temperature: 13.9 },
      { month: 'Nov', city: 'London', temperature: 6.6 },
      { month: 'Dec', city: 'Tokyo', temperature: 9.6 },
      { month: 'Dec', city: 'London', temperature: 4.8 },
    ];

    const chart = new G2.Chart({
      container: 'container',
      autoFit: true,
      height: 500,
    });

    chart.data(data);
    chart.scale({
      month: {
        range: [0, 1],
      },
      temperature: {
        nice: true,
      },
    });

    chart.tooltip({
      showCrosshairs: true,
      shared: true,
    });

    chart.axis('temperature', {
      label: {
        formatter: (val) => {
          return val + ' °C';
        },
      },
    });

    chart
      .line()
      .position('month*temperature')
      .color('city')
      .shape('smooth');

    chart
      .point()
      .position('month*temperature')
      .color('city')
      .shape('circle');

    chart.render();
  </script>
</body>

</html>

这是一个很常规的折线图,效果图是这样的。

简单分析一下js的代码

在html中引入js<script src="https://gw.alipayobjects.com/os/lib/antv/g2/4.1.1/dist/g2.min.js"></script>后,使用G2类来创建图表

  • 第一步 创建 Chart 对象

    const chart = new G2.Chart({
    container: 'container',
    autoFit: true,
    height: 500,
    });

    使用构造函数,传入存放图表容器的id,铺满的模式,以及高度。在纯html中,是使用new G2.Chart()去构建一个G2图表,如果是用npm,则是import { Chart } from '@antv/g2'; .... new Chart()

  • 第二步 载入数据源
    chart.data(data); 使用data方法,将数组data传入。

  • 第三步 创建图形语法,绘制柱状图
    chart.interval() 区间
    chart.scale() 度量
    chart.line() 线
    chart.point()
    chart.axis() 坐标轴
    chart.tooltip() 辅助信息

  • 第四步 渲染图表
    chart.render()

开发一个图表主要是分为这四步,如果要多点交互也可以加入交互的语法。
下面是用G2制作的一些常用图表,大家可以看下。

总体来讲,G2的案例库是要比echart少很多的,很多不是开行即用的,但是由于自身的组合设计思想,图表的扩展性很高。
G2毕竟还是一个比较年轻的图表库,要多尝试尝试。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 84 9 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
关于作者
这把我C

这把我C

完整的教程https://fizzz.blog.csdn.net。该网站都是残缺

原创241
阅读220.9w
收藏84
点赞75
评论15
打赏用户 1
我要创作
分享技术经验,可获取创作收益
分类专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
这把我C
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区