Frame

概述

G2 接收的数据格式非常简单:标准的JSON数组,每个数组元素是一个 JSON 对象,G2 在图表的内部将数据转换成一个 Frame对象,也可以用户直接创建Frame 对象,同时执行一些数据操作。

语法

var data = [
  {gender:'男',count:40},
  {gender:'女',count:30}
];

var Frame = G2.Frame;
var frame = new Frame(data); // 图表内部做的转换
Frame.sort(frame,'count'); // 按照count 排序
chart.source(frame);

方法

Frame 数据集合的操作基本上都是列操作,下面列出了 Frame 数据集合对象提供的操作方法:

colNames

frame.colNames()

return Array; 返回数据集合的所有列名称。

colCount

frame.colCount()

return Number; 返回数据集合列的个数。

colIndex

frame.colIndex(name)

return Number; 根据列名称获取对应的索引。

colArray

frame.colArray(name)

return Array; 根据列名称、索引获取列对应的数组。

colReplace

frame.colReplace(name, arr)

return frame; 替换数据集合中的列数组。

  • name 可以是列名称也可以是索引
  • 返回数据集合本身,数据集合发生改变

rowCount

frame.rowCount()

return Number; 返回数据集合行的个数。

rowObject

frame.rowObject(index)

return Object; 根据索引获取行对象。

cell

frame.cell(rowIndex,colName)

返回指定行索引和列名称(列索引)的数值。

toArray

frame.toArray()

return Array; 将数据集合生成列数组。

toJSON

frame.toJSON()

return Array; 将数据集合生成 JSON 数组。

s

frame.s()

return String; 将整个数据集合生成字符串,一般用于调试输出现有集合。

addCol

frame.addCol(name, arr|fn)

添加列:

  • name: 列名称;
  • arr:列对应的数组;
  • fn:回调函数,函数原型 function(obj){}。

col

frame.col(name)

return Frame; 根据列名称或者索引生成新的数据集合。

cols

frame.cols(names)

return Frame; 根据多个列名称或者索引生成新的数据集合。

row

frame.row(rowIndex)

return Frame; 根据行索引生成新的数据集合。

rows

frame.rows(rowIndexs)

return Frame; 根据多个行索引生成新的数据集合。

sub

frame.sub(startCol, endCol, startRow, endRow)

return Frame; 根据行和列获取一个子集合。

Frame 类有大量静态方法,用于统计 Frame 的数据、合并、排序等功能:

mean

Frame.mean(frame, x)

return Number; 计算列 x 的平均值。

geometric_mean

Frame.geometric_mean(frame, x)

return Number; 计算列 x 的几何平均值。

sum

Frame.sum(frame, x)

return Number; 计算列 x 的和。

max

Frame.max(frame, x)

return Number; 计算列 x 的最大值。

min

Frame.min(frame, x)

return Number; 计算列 x 的最小值。

range

Frame.range(frame, x)

return Array; 计算列 x 的最小值和最大值。

model

Frame.model(frame, x)

return Number; 计算列 x 的众数,最多的数。

median

Frame.median(frame, x)

return Number; 计算列 x 的中位数。

variance

Frame.variance(frame, x)

return Number; 计算列 x 的方差。

standard_deviation

Frame.standard_deviation(frame, x)

return Number; 计算列 x 的标准方差。

sort

Frame.sort(frame, x)

return Frame; 返回按照列排序后的数据集合。

sortBy

Frame.sortBy(frame, fn)

return Frame; 返回按照列排序后的数据集合,fn是排序的函数,函数原型是 function(obj1, obj2)。

filter

Frame.filter(frame, fn)

return Frame; 过滤数据集合,fn 的函数原型 function(obj,index) 返回 true 或者 false。

group

Frame.group(frame, condition)

return Array; 按照条件进行分组,返回 [frame1,frame2...framen],condition条件可以是列名的数组也可以是一个函数返回一个唯一的键值。

groupToMap

Frame.groupToMap(frame, condition)

return Array;

  • 按照条件进行分组,形成map,键值对,返回 {key1: frame1,key2: frame2,key3: frame3....keyn:framen};
  • condition条件可以是列名的数组也可以是一个函数返回一个唯一的键值。

complement

Frame.complement(frame, cols)

return Frame; 取指定列的补集组成的数据集合,例如 names: ['a','b','c','d'], Frame.complement(frame,['a','c']),生成的names : ['b','d']的数据集合

merge

Frame.merge(frame1,frame2...framen)

return Frame; 合并传入的集合成为一个集合,列不发生变化,假设传入的集合的列一致,仅是增加行

combin

Frame.combin(frame1,frame2...framen)

return Frame; 合并传入的集合成为一个集合,列进行组合,行的数目不变,仅仅是列变化

combinColumns

Frame.combinColumns(frame, cols, name, typeName, retains)

return Frame; 将多列合并成一列,然后基于多列的数据进行统计

  • cols:是要合并的列;
  • name:合并的新列的名称;
  • typeName:存储原先字段的名字作为分类;
  • retains:除了合并的列之外保留的列。

combinArray

Frame.combinArray(newName, arr0, arr1...arrn)

return Frame; 将多个数组合并成一个数据集合,并形成新的列,新的列的值为数组的索引。

  • newName 生成新的列的字段名,默认为 'type'。
示例
var arr1 = [{a: 'a1','b': 'b1'}];
var arr2 = [{a: 'a2','b': 'b2'}];

// 新的数据 : [{a: 'a1','b': 'b1',type: 0}, {a: 'a2','b': 'b2',type:1}]
Frame.combinArray(arr1, arr2); 
// 新的数据 : [{a: 'a1','b': 'b1',myType: 0},{a: 'a2','b': 'b2',myType: 1}];
Frame.combinArray('myType', arr1, arr2);