前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?

三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?

作者头像
用户2356368
发布于 2022-09-16 10:55:14
发布于 2022-09-16 10:55:14
3.6K02
代码可运行
举报
文章被收录于专栏:薄荷前端薄荷前端
运行总次数:2
代码可运行

最近阿里正式开源的BizCharts图表库基于React技术栈,各个图表项皆采用了组件的形式,贴近React的使用特点。同时BizCharts基于G2进行封装,Bizcharts也继承了G2相关特性。公司目前统一使用的是ECharts图表库,下文将对3种图表库进行分析比对。

BizCharts

文档地址:BizCharts

一、安装

通过 npm/yarn 引入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install bizcharts --save

yarn add bizcharts  --save

二、引用

成功安装完成之后,即可使用 import 或 require 进行引用。

例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
import chartConfig from './assets/js/chartConfig';

<div className="App">
    <Chart width={600} height={400} data={chartConfig.chartData} scale={chartConfig.cols}>
      <Axis name="genre" title={chartConfig.title}/>
      <Axis name="sold" title={chartConfig.title}/>
      <Legend position="top" dy={-20} />
      <Tooltip />
      <Geom type="interval" position="genre*sold" color="genre" />
    </Chart>
</div>

该示例中,图表的数据配置单独存入了其他js文件中,避免页面太过冗杂

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = {
    chartData : [
	    { genre: 'Sports', sold: 275, income: 2300 },
	    { genre: 'Strategy', sold: 115, income: 667 },
	    { genre: 'Action', sold: 120, income: 982 },
	    { genre: 'Shooter', sold: 350, income: 5271 },
	    { genre: 'Other', sold: 150, income: 3710 }
    ],
    // 定义度量
    cols : {
	    sold: { alias: '销售量' }, // 数据字段别名映射
	    genre: { alias: '游戏种类' }
    },
    title : {
	    autoRotate: true, // 是否需要自动旋转,默认为 true
	    textStyle: {
	      fontSize: '12',
	      textAlign: 'center',
	      fill: '#999',
	      fontWeight: 'bold',
	      rotate: 30
	    }, // 坐标轴文本属性配置
	    position:'center', // 标题的位置,**新增**
    }
}

效果预览:

三、DataSet

BizCharts中可以通过dataset(数据处理模块)来对图标数据进行处理,该方法继承自G2,在下文中将对此进行详细分析。

快速跳转

G2

BizCharts基于G2进行开发,在研究BizCharts的过程中也一起对G2进行了实践。

一、安装

和BizCharts一样,可以通过 npm/yarn 引入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install @antv/g2 --save

yarn add @antv/g2 --save

与BizCharts不同,G2初始化数据并非以组件的形式引入,而是需要获取需要在某个DOM下初始化图表。获取该DOM的唯一属性id之后,通过chart()进行初始化。

二、引用

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react';
import G2 from '@antv/g2';
    class g2 extends React.Component {constructor(props) {
	    super(props);
	    this.state = {
	      data :[
	        { genre: 'Sports', sold: 275 },
	        { genre: 'Strategy', sold: 115 },
	        { genre: 'Action', sold: 120 },
	        { genre: 'Shooter', sold: 350 },
	        { genre: 'Other', sold: 150 }
	      ]
	    };
    }

    componentDidMount() {
	    const chart = new G2.Chart({
	      container: 'c1', // 指定图表容器 ID
	      width: 600, // 指定图表宽度
	      height: 300 // 指定图表高度
	    });
	    chart.source(this.state.data);
	    chart.interval().position('genre*sold').color('genre');
	    chart.render();
    }
    render() {
	    return (
	      <div id="c1" className="charts">
	      </div>
	    );
	}
}
export default g2;

效果图:

三、DataSet

DataSet 主要有两方面的功能,解析数据(Connector)&加工数据(Transform)。

官方文档描述得比较详细,可以参考官网的分类:

源数据的解析,将csv, dsv,geojson 转成标准的JSON,查看Connector 加工数据,包括 filter,map,fold(补数据) 等操作,查看Transform 统计函数,汇总统计、百分比、封箱 等统计函数,查看 Transform 特殊数据处理,包括 地理数据、矩形树图、桑基图、文字云 的数据处理,查看 Transform

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// step1 创建 dataset 指定状态量
const ds = new DataSet({
 state: {
    year: '2010'
 }
});

// step2 创建 DataView
const dv = ds.createView().source(data);

dv.transform({
 type: 'filter',
 callback(row) {
	return row.year === ds.state.year;
 }
});

// step3 引用 DataView
chart.source(dv);
// step4 更新状态量
ds.setState('year', '2012');

以下采用官网文档给出的示例进行分析

示例一

该表格里面的数据是美国各个州不同年龄段的人口数量,表格数据存放在类型为CVS的文件中 数据链接(该链接中为json类型的数据)

State

小于5岁

5至13岁

14至17岁

18至24岁

25至44岁

45至64岁

65岁及以上

WY

38253

60890

29314

53980

137338

147279

65614

DC

36352

50439

25225

75569

193557

140043

70648

VT

32635

62538

33757

61679

155419

188593

86649

...

...

...

...

...

...

...

...

初始化数据处理模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import DataSet from '@antv/data-set';

const ds = new DataSet({
//state表示创建dataSet的状态量,可以不进行设置
 state: {
    currentState: 'WY'
    }
});

const dvForAll = ds
// 在 DataSet 实例下创建名为 populationByAge 的数据视图
    .createView('populationByAge') 
// source初始化图表数据,data可为http请求返回的数据结果
    .source(data, {
      type: 'csv', // 使用 CSV 类型的 Connector 装载 data,如果是json类型的数据,可以不进行设置,默认为json类型
});

/**
trnasform对数据进行加工处理,可通过type设置加工类型,具体参考上文api文档
加工过后数据格式为
[
{state:'WY',key:'小于5岁',value:38253},
{state:'WY',key:'5至13岁',value:60890},
]
*/ 
dvForAll.transform({
    type: 'fold',
    fields: [ '小于5岁','5至13岁','14至17岁','18至24岁','25至44岁','45至64岁','65岁及以上' ],
    key: 'age',
     value: 'population'
});

//其余transform操作
const dvForOneState = ds
    .createView('populationOfOneState')
    .source(dvForAll); // 从全量数据继承,写法也可以是.source('populationByAge')
 dvForOneState
     .transform({ // 过滤数据,筛选出state符合的地区数据
    type: 'filter',
    callback(row) {
      return row.state === ds.state.currentState;
    }
})
 .transform({
    type: 'percent',
    field: 'population',
    dimension: 'age',
    as: 'percent'
    });

使用G2绘图 G2-chart Api文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import G2 from '@antv/g2';

// 初始化图表,id指定了图表要插入的dom,其他属性设置了图表所占的宽高
const c1 = new G2.Chart({
  id: 'c1',
  forceFit: true,
  height: 400,
});

// chart初始化加工过的数据dvForAll
c1.source(dvForAll);

// 配置图表图例
c1.legend({
  position: 'top',
});

// 设置坐标轴配置,该方法返回 chart 对象,以下代码表示将坐标轴属性为人口的数据,转换为M为单位的数据
c1.axis('population', {
  label: {
    formatter: val => {
      return val / 1000000 + 'M';
    }
  }
});

c1.intervalStack()
  .position('state*population')
  .color('age')
  .select(true, {
    mode: 'single',
    style: {
      stroke: 'red',
      strokeWidth: 5
    }
  });
  
//当tooltip发生变化的时候,触发事件,修改ds的state状态量,一旦状态量改变,就会触发图表的更新,所以c2饼图会触发改变
c1.on('tooltip:change', function(evt) {
  const items = evt.items || [];
  if (items[0]) {
  //修改的currentState为鼠标所触及的tooltip的地区
    ds.setState('currentState', items[0].title);
  }
});

// 绘制饼图
const c2 = new G2.Chart({
  id: 'c2',
  forceFit: true,
  height: 300,
  padding: 0,
});
c2.source(dvForOneState);
c2.coord('theta', {
  radius: 0.8 // 设置饼图的大小
});
c2.legend(false);
c2.intervalStack()
  .position('percent')
  .color('age')
  .label('age*percent',function(age, percent) {
    percent = (percent * 100).toFixed(2) + '%';
    return age + ' ' + percent;
  });

c1.render();
c2.render();

ECharts

ECharts是一个成熟的图表库, 使用方便、图表种类多、容易上手。文档资源也比较丰富,在此不做赘述。 ECharts文档

ECharts & BizCharts & G2 对比

对比BizCharts和G2两种图表库,BizCharts主要是进行了一层封装,使得图表可以以组件的形式进行调用,按需加载,使用起来更加方便。 简单对比一下三个图表库的区别:

初始化图表: ECharts:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 基于准备好的dom,初始化ECharts实例
var myChart = echarts.init(document.getElementById('main'));

BizCharts:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 以组件的形式,组合调用
import { Chart, Geom, Axis, ... } from 'bizcharts';

<Chart width={600} height={400} data={data}>
	...
</Chart>

G2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 基于准备好的dom,配置之后进行初始化
const chart = new G2.Chart({
    container: 'c1', // 指定图表容器 ID
    width: 600, // 指定图表宽度
    height: 300 // 指定图表高度
});
chart.source(data);
chart.render();
 
<div id="c1" className="charts"></div>

配置:

ECharts:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 集中在options中进行配置
myChart.setOption({
    title: {
        ...
    },
    tooltip: {},
    xAxis: {
        data: [...]
    },
    yAxis: {},
    series: [{
        ...
    }]
});

BizCharts:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 根据组件需要,配置参数之后进行赋值
const cols = {...};
const data = {...};
<Chart width={600} height={400} data={data} sca`enter code here`le={cols}>
	...
</Chart>

G2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chart.tooltip({
  triggerOn: '...'
  showTitle: {boolean}, // 是否展示 title,默认为 true
  crosshairs: {
    ...
    style: {
      ...
    }
  }
});

事件:

ECharts:事件 api文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myChart.on('click', function (params) {
    console.log(params);
});

BizCharts:事件 api文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<chart
  onEvent={e => {
    //do something
  }}
/>

G2: 事件 api文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chart.on('mousedown', ev => {});

总结

对比以上3种图表,ECharts和BizCharts相对容易使用,尤其ECharts的配置非常清晰,BizCharts与其也有一定相似之处。BizCharts优势在于组件化的形式使得dom结构相对清晰,按需引用。G2比较适合需要大量图表交互时引用,其丰富的api处理交互逻辑相对更有优势。

广而告之

本文发布于薄荷前端周刊,欢迎Watch & Star ★,转载请注明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?广而告之
最近阿里正式开源的BizCharts图表库基于React技术栈,各个图表项皆采用了组件的形式,贴近React的使用特点。同时BizCharts基于G2进行封装,Bizcharts也继承了G2相关特性。公司目前统一使用的是ECharts图表库,下文将对3种图表库进行分析比对。
用户2356368
2019/04/03
1.3K0
三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?广而告之
三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?【面试+工作】
最近正式开源的BizCharts图表库基于React技术栈,各个图表项皆采用了组件的形式,贴近React的使用特点。同时BizCharts基于G2进行封装,Bizcharts也继承了G2相关特性。公司目前统一使用的是ECharts图表库,下文将对3种图表库进行分析比对。
Java帮帮
2018/12/12
3.1K0
三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?【面试+工作】
G2 基本使用 折线图 柱状图 饼图 基本配置
  1.浏览器引入 <!-- 引入在线资源 --> <script src="https://gw.alipayobjects.com/os/lib/antv/g2/3.4.10/dist/g2.min.js"></script>
用户1197315
2019/05/25
4.9K0
Day2 建立第一个AntV/G2图表
注意:使用该种方式引入脚本需要使用webpack工具打包才可运行,Webpack 是目前比较流行的模块打包工具,你可以在使用 webpack 的项目中轻松的引入和打包AntV,这里假设你已经对 webpack 具有一定的了解并且在自己的项目中使用。
IT人一直在路上
2019/09/16
1.3K0
2019-08-22 vue项目中使用蚂蚁数据可视化 antv
蚂蚁数据可视化 官网示例 第一步:安装 npm install @antv/f2 --save 第二步:在vue 组件组件中引入 import F2 from '@antv/f2' 第三步: id
用户4344670
2019/08/28
1.7K0
2019-08-22  vue项目中使用蚂蚁数据可视化  antv
从零开发可视化大屏制作平台(技术拆解版)
目前很多企业或多或少的面临“信息孤岛”问题,各个系统平台之间的数据无法实现互通共享,难以实现一体化的数据分析和实时呈现。
徐小夕
2024/03/18
5960
从零开发可视化大屏制作平台(技术拆解版)
封装antv/g2折线图所遇到的问题及解决办法
最近在项目中做了一个监控模块的功能,大致流程就是后端调用普罗米修斯的接口,获得k8s pod, container,node, workload, cluster的一些监控指标,如cpu使用率,内存使用率,网络出入,磁盘使用,API Server 延迟与请求次数. 图表如下图。
拿我格子衫来
2022/01/24
1.7K0
封装antv/g2折线图所遇到的问题及解决办法
如何使用JavaScript实现前端导入和导出excel文件(H5编辑器实战复盘)
最近笔者终于把H5-Dooring的后台管理系统初步搭建完成, 有了初步的数据采集和数据分析能力, 接下来我们就复盘一下其中涉及的几个知识点,并一一阐述其在Dooring H5可视化编辑器中的解决方案. 笔者将分成3篇文章来复盘, 主要解决场景如下:
徐小夕
2020/10/30
3.1K0
如何使用JavaScript实现前端导入和导出excel文件(H5编辑器实战复盘)
阿里前10大开源项目,致敬!
1.JSON处理器 fastjson fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。 主要特点: 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson) 强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum) 零依赖(没有依赖其它任何类库除了JDK) 示例代码: import com.alibaba.fastjson.JSON;  Group group = n
美的让人心动
2018/06/14
1.5K0
从零开发可视化大屏制作平台
几个月前开源的H5页面制作平台H5-Dooring 收到了很多热心的反馈和交流, 顺着笔者之前的规划, 我们又做了一款可视化大屏编辑器V6.Dooring. 接下来笔者就来带大家一起看看我们的方案设计和技术实现.
徐小夕
2021/03/12
2.1K0
从零开发可视化大屏制作平台
echarts 从0到1
除了通过独立配置每一图表数据, echart 提供 dataset 集中管理实例内的数据集合。
copy_left
2021/12/08
1.3K0
使用 craco 对 cra 项目进行构建优化
修改 CRA 项目的配置使用 create-react-app 创建的项目默认是无法修改其内部的 webpack 配置的,不像 vue-cli 那样可以通过一个配置文件修改。 虽然有一个 eject 命令可以是将配置完全暴露出来,但这是一个不可逆的操作,同时也会失去 CRA 带来的便利和后续升级。
用户1476962
2022/09/29
1.6K0
「AntV」当我用AI为开发AntV图表插上想象的翅膀后
做前端图表时,最耗时的就是找配置参数,比如你在使用AntV G2时,为了更加美观,拉大数据之间的差距,需要将y轴设置一个最小值,由于每个图表的参数少说十几个,多达二十多个,一个一个找,势必会浪费很多时间,更何况有时你找的参数并不在某一具体的图表模块,而是在公共的图表组件配置模块中。这个时候我就思考,这些寻找配置参数,毫无技术性的,耗时的工作能不能交个AI来做?所以在日常的开发图表的过程中,遇到问题,我刻意地去利用AI去完成。下面看一下我在实际开发中的几个案例
拿我格子衫来
2023/08/24
5310
「AntV」当我用AI为开发AntV图表插上想象的翅膀后
基于f2从零实现移动端可视化编辑器
笔者之前花了大量的时间在思考如何设计和实现H5页面可视化编辑器H5-Dooring,从第一个版本到现在经历了很多次版本迭代和优化,也收到了很多宝贵的建议,目前刚好完成了移动端数据可视化的基本设计和落地方案,在这里特地总结和复盘一下。
徐小夕
2020/09/18
1.6K0
图表库ECharts的使用
ECharts是一个兼容绝大部分浏览器,可流畅运行在PC和移动设备上的纯 Javascript 的图表库。ECharts 提供了折线图,柱状图,散点图,饼图,K线图,盒形图等常规图,还有可视化的地图、热力图、线图,、可视化的关系图等。多样的图表、丰富绚丽的视觉效果、流畅的交互,用来做数据统计分析是再好不过了。 1、引入echarts.js
疯狂的技术宅
2019/03/27
1.3K0
图表库ECharts的使用
前端开发者常用的9个JavaScript图表库
当前,数据可视化已经成为数据科学领域非常重要的一部分。不同网络系统中产生的数据,都需要经过适当的可视化处理,以便更好的呈现给用户读取和分析。 对任何一个组织来说,如果能够充分的获取数据、可视化数据和分析数据,那么就能很大程度上帮助了解数据产生的深层次原因,以便据此做出正确的决定。 对于前端开发人员来说,如果能够掌握交互式网页中的数据可视化技术,则是一项很棒的技能。当然,通过一些 JavaScript 的图表库也会使前端的数据可视化变得更加容易。使用这些库,开发者可以在无需考虑不同的语法所带来的编程难题的情况
葡萄城控件
2018/03/27
7.4K0
前端开发者常用的9个JavaScript图表库
「AntV」基于 AntV G2Plot 来实现一个 堆叠柱状图 加 折线图 的多图层案例
最近研究了一下antv/g2的组合图例,并尝试做了一个不算太难的组合图,下面介绍一下整个图里的实现过程。
拿我格子衫来
2023/08/24
1.7K0
「AntV」基于 AntV G2Plot 来实现一个 堆叠柱状图 加 折线图 的多图层案例
前端开发者常用的 9个JavaScript 图表库
英文: Anton Shaleynikov 译文:葡萄城控件 www.cnblogs.com/powertoolsteam/p/top-9-javascript-charting-libraries.html 当前,数据可视化已经成为数据科学领域非常重要的一部分。不同网络系统中产生的数据,都需要经过适当的可视化处理,以便更好的呈现给用户读取和分析。 对任何一个组织来说,如果能够充分的获取数据、可视化数据和分析数据,那么就能很大程度上帮助了解数据产生的深层次原因,以便据此做出正确的决定。 对于前端开发人员
企鹅号小编
2018/02/01
8.5K0
前端开发者常用的 9个JavaScript 图表库
Day4 chart基本属性分析
属性设置是基于chart实例的,所以我们必须先获取一个chart画板实例,获取方式: G2.Chart。创建 Chart 的方式如下:
IT人一直在路上
2019/09/16
5550
前端er必须掌握的数据可视化技术
又是一月结束,打工人准时准点的汇报工作如期和大家见面啦。提到汇报,必不可少的一部分就是数据的汇总、分析。
葡萄城控件
2021/12/24
2.3K0
前端er必须掌握的数据可视化技术
相关推荐
三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?广而告之
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档