Frame 常见操作
简介创建 Frame使用 Frame 处理数据合并多列 Frame.combinColumns调试时输出更多简介在 data 数据章节我们了解了 Frame 数据集对象,通过将 JSON 数组转换为 Frame 对象,可以方便快捷得进行数据的各种操作。 创建 Frame通过 G2.Frame 来获取 Frame 对象。 Example:
var data = [{gender:'男',count:40},{gender:'女',count:30}];var Frame = G2.Frame;var frame = new Frame(data); // 将 data 转换为 Frame 对象console.log(frame); // {data: Array[2], names: Array[2], arr: Array[2]}
使用 Frame 处理数据我们为 Frame (数据集合)对象封装了大量的数据操作方法,基本上都是列操作,方便用户快捷得对数据进行增删查改。 下例通过调用 addCol 为数据集添加新列以表示股票的涨跌情况。 完整的代码如下:
var data = [{"time":"2015-11-19","start":8.18,"max":8.33,"min":7.98,"end":8.32},{"time":"2015-11-18","start":8.37,"max":8.6,"min":8.03,"end":8.09},{"time":"2015-11-17","start":8.7,"max":8.78,"min":8.32,"end":8.37},{"time":"2015-11-16","start":8.18,"max":8.69,"min":8.05,"end":8.62},{"time":"2015-11-13","start":8.01,"max":8.75,"min":7.97,"end":8.41}];var Frame = G2.Frame;var frame = new Frame(data);frame.addCol('trend', function(obj) {return (obj.start <= obj.end) ? 0 : 1;});console.log(frame.colNames()); // ["time", "start", "max", "min", "end", "trend"]var chart = new G2.Chart({id: 'c1',forceFit: true, // 图表自适应宽度height: 350});chart.source(frame, {'trend': {type: 'cat',alias: '趋势',values: ['上涨','下跌']},'time': {type: 'timeCat',mask: 'mm-dd',},});chart.schema().position('time*(start+end+max+min)').color('trend', ['#C00000','#19B24B']).shape('candle').tooltip('start*end*max*min').size(20);chart.render();
合并多列 Frame.combinColumns同时 Frame 还提供了大量的静态方法,用于数据的统计、合并、排序等操作,详见 Frame API。 有时候在进行可视化的时候我们需要将原始数据的多条记录进行合并,同时又要保持原有的属性名,这个时候 Frame.combinColumns 方法就非常有用。 Frame.combinColumns(frame, cols, name, typeName, retains),其中各个参数的含义如下
cols:array,是要合并的列;name:string,合并的新列的名称;typeName:string,存储原先字段的名字作为分类;retains:array,除了合并的列之外保留的列。 Example: 如下数据: [{"date":1186444800000,"start":22.75,"end":23.44,"lowest":22.69,"mean":23.335}] 通过调用 Frame.combineColumns(frame, [‘start’, ‘end’, ‘lowest’], ‘value’, ‘type’, [‘date’, ‘mean’]); 可将数据转换为:
[{"date":1186444800000,"value":22.75,"type":"start","mean":23.335},{"date":1186444800000,"value":23.44,"type":"end","mean":23.335},{"date":1186444800000,"value":22.69,"type":"lowest","mean":23.335},{"date":1186444800000,"value":23.335,"type":"mean","mean":23.335},]
完整的代码如下:
var data = [{"date":1186444800000,"start":22.75,"end":23.44,"lowest":22.69,"mean":23.335},{"date":1186358400000,"start":23.03,"end":22.97,"lowest":22.44,"mean":23.285},{"date":1186099200000,"start":23.2,"end":22.92,"lowest":22.87,"mean":23.2945},{"date":1186012800000,"start":22.65,"end":23.36,"lowest":22.65,"mean":23.332},{"date":1185926400000,"start":23.17,"end":23.25,"lowest":22.85,"mean":23.367},{"date":1185840000000,"start":23.88,"end":23.25,"lowest":23.24,"mean":23.4035},{"date":1185753600000,"start":23.55,"end":23.62,"lowest":23.38,"mean":23.433},{"date":1185494400000,"start":23.98,"end":23.49,"lowest":23.47,"mean":23.428},{"date":1185408000000,"start":24.4,"end":24.03,"lowest":23.62,"mean":23.473},{"date":1185321600000,"start":25.01,"end":24.68,"lowest":24.59,"mean":23.5455},{"date":1185235200000,"start":24.8,"end":24.84,"lowest":24.73,"mean":23.6355},{"date":1185148800000,"start":25.43,"end":24.99,"lowest":24.98,"mean":23.718}];var Frame = G2.Frame;var frame = new Frame(data);frame = Frame.combineColumns(frame, ['start', 'end', 'lowest'], 'value', 'type', ['date', 'mean']);var chart = new G2.Chart({id: 'c2', // 指定图表容器 IDheight : 300, // 指定图表高度forceFit: true, // 图表自适应宽度plotCfg: {background: {stroke: '#ccc', // 边颜色lineWidth: 1, // 边框粗细}}});chart.source(frame, {date: {type: "timeCat",mask: "mm-dd"}});// 绘制线图chart.line().position('date*value').color('type').shape('type', function(val) {if (val === 'end') {return 'line';} else {return 'dash'; // 满足该条件设置为虚线}});chart.render();
调试时输出由于Frame对象主要有三个属性:
data 输入的数据,是一个对象数组,数据变化时不受影响names 数据的列,如果未设置,按照第一行的数据存在的字段自动抽取arr 将data按照列的形式进行组织 一旦对Frame对象进行操作后,data中的数据跟Frame对象不一致,arr中的数据是一个个的数组不方便查看,所以Frame 提供了格式化函数 .s()
var data = [{gender:'男',count:40},{gender:'女',count:30}];var Frame = G2.Frame;var frame = new Frame(data); // 将 data 转换为 Frame 对象console.log(frame.s());/** 结果"gender count男 40女 30"*/
更多本章仅介绍Frame的基本用法和常用方法,更多 Frame 的方法详见 Frame api。
当前内容版权归 蚂蚁金服 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 蚂蚁金服 .上一篇:下一篇:<div class="
