Frame
获取方式:G2.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 = Frame.sort(frame, 'count'); // 按照count 排序
chart.source(frame);
方法
Frame 数据集合的操作基本上都是列操作,下面列出了 Frame 数据集合对象提供的操作方法:
colNames
使用方式:frame.colNames()
返回结果:Array
返回数据集合的所有列名称。
colCount
使用方式:frame.colCount()
返回结果:Number
返回数据集合列的个数。
colIndex
使用方式:frame.colIndex(name)
返回结果:Number
根据列名称获取对应的列索引。
colArray
使用方式:frame.colArray(name)
返回结果:Array
根据列名称、索引获取列对应的数组。
colReplace
使用方式:frame.colReplace(name, arr)
返回结果: Frame
替换数据集合中的列数组,返回数据集合本身,原数据集合发生改变。
参数
name
: String | Number
可以是列名称也可以是索引
arr
: Array
要替换的值。
代码示例
var data = [
{a: 'a', value: 1},
{a: 'b', value: 2},
{a: 'c', value: 3}
];
var Frame = G2.Frame;
var frame = new Frame(data);
frame.colReplace('value', [11, 22, 33]);
console.log(JSON.stringify(frame.toJSON())); // [{"a":"a","value":11},{"a":"b","value":22},{"a":"c","value":33}]
rowCount
使用方式:frame.rowCount()
返回结果:Number
返回数据集合行的个数,即数据的个数。
rowObject
使用方式:frame.rowObject(index)
返回结果:Object
根据索引获取行对象。
cell
使用方式:frame.cell(rowIndex, colName)
返回结果:返回指定行索引和列名称(列索引)的数值。
toArray
使用方式:frame.toArray()
返回结果:Array
将数据集合生成列数组。
代码示例
var data = [
{a: 'a', value: 1},
{a: 'b', value: 2},
{a: 'c', value: 3}
];
var Frame = G2.Frame;
var frame = new Frame(data);
console.log(JSON.stringify(frame.toArray())); // [["a","b","c"],[1,2,3]]
toJSON
使用方式:frame.toJSON()
返回结果:Array
数据集合生成 JSON 数组。
s
使用方式:frame.s()
返回结果:String
将整个数据集合生成字符串,一般用于调试输出现有集合。
addCol
使用方式:frame.addCol(name, arr|fn)
frame 添加列。
参数
name
: String
列名称
arr
:Array | Function
可以是数组也可以是回调函数。
代码示例
var data = [
{a: 'a', value: 1},
{a: 'b', value: 2},
{a: 'c', value: 3}
];
var Frame = G2.Frame;
var frame = new Frame(data);
frame.addCol('type', ['A', 'B', 'C']);
frame.addCol('color', function(obj) {
if (obj.value > 2) {
return 'red';
} else {
return 'yellow';
}
});
console.log(JSON.stringify(frame.toJSON()));
// [{"a":"a","value":1,"type":"A","color":"yellow"},{"a":"b","value":2,"type":"B","color":"yellow"},{"a":"c","value":3,"type":"C","color":"red"}]
col
使用方式:frame.col(name)
返回结果:Frame
根据列名称或者索引获取列构成的集合。返回的结果是新生成的数据集合。
cols
使用方式:frame.cols(names)
返回结果:Frame
根据多个列名称或者索引生成新的数据集合。
row
使用方式:frame.row(rowIndex)
返回结果:Frame
根据行索引生成新的数据集合。
rows
使用方式:frame.rows(rowIndexs)
返回结果:Frame
根据多个行索引生成新的数据集合。
sub
使用方式:frame.sub(startCol, endCol, startRow, endRow)
返回结果:Frame
根据行和列获取一个子集合。
静态方法
Frame 类有大量静态方法,用于统计 Frame 的数据、合并、排序等功能:
mean
使用方式:Frame.mean(frame, x)
返回结果: Number
计算列 x 的平均值。
geometric_mean
使用方式:Frame.geometric_mean(frame, x)
返回结果:Number
计算列 x 的几何平均值。
sum
使用方式:Frame.sum(frame, x)
返回结果:Number
计算列 x 的和。
max
使用方式:Frame.max(frame, x)
返回结果:Number
计算列 x 的最大值。
min
使用方式:Frame.min(frame, x)
返回结果:Number
计算列 x 的最小值。
range
使用方式:Frame.range(frame, x)
返回结果:Array
计算列 x 的最小值和最大值范围。
mode
使用方式:Frame.mode(frame, x)
返回结果:Number
计算列 x 的众数(个数最多的数)。
median
使用方式:Frame.median(frame, x)
返回结果:Number
计算列 x 的中位数。
variance
使用方式:Frame.variance(frame, x)
返回结果:Number
计算列 x 的方差。
standard_deviation
使用方式:Frame.standard_deviation(frame, x)
返回结果:Number
计算列 x 的标准方差。
sort
使用方式:Frame.sort(frame, x)
返回结果:Frame
返回按照列排序后的数据集合,源 frame 不受影响,会返回新的 frame 对象。
sortBy
使用方式:Frame.sortBy(frame, callback)
返回结果:Frame
返回按照列排序后的数据集合,fn 是排序的函数,函数原型是 function(obj1, obj2)。
参数
callback
: Function
排序的回调函数。
代码示例
var data = [
{a: 'a', value: 13},
{a: 'b', value: 2},
{a: 'c', value: 3}
];
var Frame = G2.Frame;
var frame = new Frame(data);
frame = Frame.sortBy(frame, function(obj1, obj2) {
return obj1.value > obj2.value;
});
console.log(JSON.stringify(frame.toJSON())); // [{"a":"b","value":2},{"a":"c","value":3},{"a":"a","value":13}]
filter
使用方式:Frame.filter(frame, callback)
返回结果:Frame
参数
callback
: Function
过滤的回调函数。
过滤数据集合,callback 的函数原型 function(obj,index) 返回 true 或者 false。
代码示例
var data = [
{a: 'a', value: 13},
{a: 'b', value: 2},
{a: 'c', value: 3}
];
var Frame = G2.Frame;
var frame = new Frame(data);
frame = Frame.filter(frame, function(obj, index) {
return obj.value < 10;
});
console.log(JSON.stringify(frame.toJSON())); // [{"a":"b","value":2},{"a":"c","value":3}]
group
使用方式:Frame.group(frame, condition)
返回结果:Array
按照条件进行分组,返回 [frame1,frame2...frameN]
参数
condition
: Function | Array
condition 分组的条件,可以根据条件函数或者列名称进行分组。
代码示例
var data = [
{"name":453,"carat":0.71,"cut":"Ideal","color":"I","clarity":"VVS2","depth":60.2,"table":56,"price":2817,"x":5.84,"y":5.89,"z":3.53},
{"name":662,"carat":0.72,"cut":"VeryGood","color":"F","clarity":"VS1","depth":60.2,"table":59,"price":2846,"x":5.79,"y":5.84,"z":3.5},
{"name":499,"carat":0.7,"cut":"Ideal","color":"I","clarity":"SI1","depth":60.7,"table":56,"price":2822,"x":5.75,"y":5.72,"z":3.48},
];
var Frame = G2.Frame;
var frame = new Frame(data);
var groups = Frame.group(frame, ['cut', 'color']);
console.log(JSON.stringify(groups));
// [[{"name":453,"carat":0.71,"cut":"Ideal","color":"I","clarity":"VVS2","depth":60.2,"table":56,"price":2817,"x":5.84,"y":5.89,"z":3.53},{"name":499,"carat":0.7,"cut":"Ideal","color":"I","clarity":"SI1","depth":60.7,"table":56,"price":2822,"x":5.75,"y":5.72,"z":3.48}],[{"name":662,"carat":0.72,"cut":"VeryGood","color":"F","clarity":"VS1","depth":60.2,"table":59,"price":2846,"x":5.79,"y":5.84,"z":3.5}]]
groupToMap
使用方式:Frame.groupToMap(frame, condition)
返回结果:Array
- 按照条件进行分组,形成 map 键值对,返回 {key1: frame1, key2: frame2, key3: frame3, .... keyn: framen};
- condition 条件可以是列名的数组也可以是一个函数返回一个唯一的键值。
complement
使用方式:Frame.complement(frame, cols)
返回结果:Frame
取指定列的补集组成的数据集合,例如 names: ['a','b','c','d'],Frame.complement(frame,['a','c']),生成的 names: ['b', 'd'] 的数据集合。
代码示例
var data = [
{a: 'a', value: 13},
{a: 'b', value: 2},
{a: 'c', value: 3}
];
var Frame = G2.Frame;
var frame = new Frame(data);
frame = Frame.complement(frame, ['value']);
console.log(JSON.stringify(frame.toJSON())); // [{"a":"a"},{"a":"b"},{"a":"c"}]
merge
使用方式:Frame.merge(frame1, frame2, ..., frameN)
返回结果:Frame
合并传入的集合成为一个集合,列不发生变化,假设传入的集合的列一致,仅是增加行。
combine
使用方式:Frame.combine(frame1, frame2, ..., frameN)
返回结果:Frame
合并传入的集合成为一个集合,列进行组合,行的数目不变,仅仅是列变化。
combineColumns
使用方式:Frame.combineColumns(frame, cols, name, typeName, retains)
返回结果:Frame
将多列合并成一列,然后基于多列的数据进行统计。
参数
cols
: Array
是要合并的列。
name
: String
合并的新列的名称,默认为 type
。
typeName
: String
存储原先字段的名字作为分类。
retains
: String | Array
除了合并的列之外保留的列,不传入则默认为只保留剩余没有参与合并的列。
使用详见教程 ->。
combineArray
使用方式:Frame.combineArray(newName, arr0, arr1, ..., arrN)
返回结果:Frame
将多个数组合并成一个数据集合,并形成新的列,新的列的值为数组的索引。
参数
newName
: String
生成新的列的字段名,默认为 '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.combineArray(arr1, arr2);
// 新的数据 : [{a: 'a1','b': 'b1',myType: 0},{a: 'a2','b': 'b2',myType: 1}];
Frame.combineArray('myType', arr1, arr2);