dataset的去重计数 g2_antvg2的理解

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

4999元包邮

去购买 >

关于antv g2的一些个人理解

G2

G2本身是一门图形语法,G2和传统的图表系统(HighCharts,ACharts等)不同,G2是一个基于统计分析的语义化数据可视化系统。它真正做到了让数据驱动图形,让你在使用它时候不用关心绘图细节,只需要知道你想通过它怎么展示你关心的数据。echarts更多的是配置options来显示图片,出发点不同。

g2构成

一个可视化框架需要四部分:

数据处理模块,对数据进行加工的模块,包括一些数据处理方法。例如:合并、分组、排序、过滤、计算统计信息等

图形映射模块,将数据映射到图形视觉通道的过程。例如:将数据映射成颜色、位置、大小等

图形展示模块,决定使用何种图形来展示数据,点、线、面等图形标记

辅助信息模块,用于说明视觉通道跟数据的映射关系,例如:坐标轴、图例、辅助文本等

在数据处理模块上,dataSet主要通过state状态管理多个dataview视图,实现多图联动,或者关联视图。dataView则是对应的是每一个数据源,通过connector来接入不同类型的数据,通过tranform进行数据的转换或者过滤。最后输出我们理想的数据,dataSet是与g2分离的,需要用到的时候可以加载

在图形映射模块上,度量 Scale,是数据空间到图形空间的转换桥梁,负责原始数据到 [0, 1] 区间数值的相互转换工作,从原始数据到 [0, 1] 区间的转换我们称之为归一化操作。我们可以通过chart.source或者chart.scale('field', defs)来实现列定义,我们可以在这对数据进行起别名,更换显示类型(time,cat类型等)

辅助信息,就是标记数据,方便理解数据

图形展示 chart图表是一个大画布,可以有多个view视图,geom则是数据映射的图形标识,就是指的点,线,面,通过对其操作,从而展示图形,

这是大体步骤:

//代码实现

const data = [

{ genre: 'Sports', sold: 275 },

{ genre: 'Strategy', sold: 115 },

{ genre: 'Action', sold: 120 },

{ genre: 'Shooter', sold: 350 },

{ genre: 'Other', sold: 150 }

];

// G2 对数据源格式的要求,仅仅是 JSON 数组,数组的每个元素是一个标准 JSON 对象。

// Step 1: 创建 Chart 对象

const chart = new G2.Chart({

container: 'c1', // 指定图表容器 ID

width : 600, // 指定图表宽度

height : 300 // 指定图表高度

});

// Step 2: 载入数据源

chart.source(data);

// Step 3:创建图形语法,绘制柱状图,由 genre 和 sold 两个属性决定图形位置,genre 映射至 x 轴,sold 映射至 y 轴

chart.interval().position('genre*sold').color('genre')

// Step 4: 渲染图表

dataSet

负责数据处理,使得数据驱动视图, 可以包含多个dataView,每个view对应一套数据

// 以下是通过state过滤数据

// 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');

// transform例子

const data = [

{ country: "USA", gold: 10, silver: 20 },

{ country: "Canada", gold: 7, silver: 26 }

];

const dv = ds.createView()

.source(data)

.transform({

type: 'fold',

fields: [ 'gold', 'silver' ], // 展开字段集

key: 'key', // key字段

value: 'value', // value字段

retains: [ 'country' ] // 保留字段集,默认为除 fields 以外的所有字段

});

/*

dv.rows 变为

[

{ key: gold, value: 10, country: "USA" },

{ key: silver, value: 20, country: "USA" },

{ key: gold, value: 7, country: "Canada" },

{ key: silver, value: 26, country: "Canada" }

]

*/

// connector例子

const testCSV = `Expt,Run,Speed

1,1,850

1,2,740

1,3,900

1,4,1070`;

const dv = new DataSet.View().source(testCSV, {

type: 'csv'

});

console.log(dv.rows);

/*

* dv.rows:

* [

* {Expt: " 1", Run: "1", Speed: "850"}

* {Expt: " 1", Run: "2", Speed: "740"}

* {Expt: " 1", Run: "3", Speed: "900"}

* {Expt: " 1", Run: "4", Speed: "1070"}

* ]

*/

度量scale

就是从数据到图形的转化,使得数据在展示的时候可以自定义

所谓的列定义,即是对度量 scale 的操作

列定义上的操作可以理解为直接修改数据源中的数据属性,因此它会影响坐标轴、tooltip 提示信息、图例、辅助元素 guide 以及几何标记的标签文本 label 的数据内容显示。

//以下是关于数据映射scale的demo

const data = [

{ type: 0, value: 1 },

{ type: 1, value: 2 },

{ type: 2, value: 3 }

];

chart.scale('type', {

type: 'cat', // 声明 type 字段为分类类型

values: [ 'A', 'B', 'C' ], // 重新显示的值

alias: '类型' // 设置属性的别名

});

// 这时候映射的value就变成了 类型:A

geom

g2对图形进行了抽象,我们通过对点,线,面操作使得可以我们可以画出各种图形

也可以自定义shape来实现图形

// line画出折线图,position分别从x轴和Y轴取数据,通过city的不同画出不同的折线

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

//size表示的是点的大小,shape为点的类型

chart.point().position('month*temperature').color('city').size(4).shape('circle').style({

stroke: '#fff',

lineWidth: 1

});

coord坐标系

chart.coord('coordTpye'[, cfg]);主要就是更改坐标系,笛卡尔坐标系(直角坐标系)和 极坐标系,例如通过改成极坐标系来画饼图

辅助信息

axis坐标轴

chart.axis('xField', {

line: {

lineWidth: 2, // 设置线的宽度

stroke: 'red', // 设置线的颜色

lineDash: [ 3, 3 ] // 设置虚线样式

}

});

实现多Y轴的绘制非常简单,用户完全不需要做任何配置。只要做到各个 geom 的 X 轴属性相同,Y 轴属性不同,G2 就会为您自动生成。

legend图例

chart.legend()

tooltip提示信息

chart.tooltip()

guide辅助元素

chart.guide()

可以画辅助线或者辅助图案

slider

label图形文本

label在geom上调用

chart.point().position(x*y).label('x', {})

facet分面

分面,将一份数据按照某个维度分隔成若干子集,然后创建一个图表的矩阵,将每一个数据子集绘制到图形矩阵的窗格中。

总结起来,分面其实提供了两个功能:

1.按照指定的维度划分数据集;

2.对图表进行排版。

通过chart.facet(type, {})调用

另外,g2也提供了自定义主题,自定义动画等更多更自由的操作

如果有错误的地方,欢迎指出~~~

感谢收看~~

参考文献:

https://antv.alipay.com/zh-cn...

https://antv.alipay.com/zh-cn...

https://segmentfault.com/a/11...

原文链接:https://segmentfault.com/a/1190000013413771


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部