G2的图表Chart,可以创建多个视图View,每个View各自又可以创建其子View,所以在G2中,View是支持嵌套的。每个View同Chart一样,拥有自己独立的数据源,坐标系,几何标记,Tooltip以及图例。Chart也是一种特殊的View;
直接通过调用chart.createView()即可创建View对象,此时会默认创建一个绘图区域于Chart相同的视图,然后可以通过region属性指定view的绘图区域。
//创建chart对象 const chart = new G2.chart({ container:'container', autoFit:false, width:1000, height:500 }); //创建视图 const view = chart.createView({ region:{ start:{x:,y:}//指定该视图绘制的其实位置,x y 为[0-1]范围的数据 end:{x:,y:}//指定该视图绘制的结束位置,x y 为[0-1]范围的数据 }, padding:[20,40],//指定视图的留白 })注:
为了让用户更好更快的指定视图的绘制区域,start和end只接受0到1范围的数据View的绘制起始点是画布左上角view并不负责最后的画布绘制,统一由chart对象进行渲染,即chart.render() view.data(data)//为View载入数据 view.interval().position('x*y').color('x')//使用图形语法绘制图表 chart.render();//由chart负责统一的渲染分面,将一份数据按照某个维度分隔成若干子集,然后创建一个图表的矩阵,将每一个数据子集绘制到图形矩阵的窗格中。 分面提供了两个功能:
按照指定的维度划分数据集对图表进行排版说明:
type用于指定分面的类型fileds属性用于指定数据集划分依据的字段eachView回调函数中创建各个视图的图表类型树形分面一般用于展示存在层次结构的数据,展示的是整体和部分之间的关系
chart.facet('tree',{ field:['grade','class'], line:{//用于配置线的显示属性 style:{ stroke:"#00a3d7" }, smooth:'true'//各个数节点的连接线是否是平滑的曲线,默认为false }, eachView(view,facet){} })镜像分面用于对比两类数据的场景,例如男女的比例,正确错误的对比等、 通过配置transpose属性为true,可以将镜像分面翻转
chart.facet('mirror',{ fields:['gender'], transpose:true, padding:[0,48,0,0], eachView(view){} })矩阵分面用于对比数据中多个字段之间的关系
chart.facet('matrix',{ fields:['SepalLength','SepalWidth','PetalLength','PetalWidth'], eachView(view,facet){} })可以通过chart上的配置项defaultInteractions更改内置的交互
new Chart({ container:'container', width:500, height:500, defaultInteractions:['tooltip'] //仅保留tooltip })可以通过chart上的两个接口来添加和移除交互
chart.interaction(name,[cfg]) 添加或者修改交互chart.removeInteraction(name) 移除交互添加或者修改交互时的第二个参数cfg用于修改已经定义好的交互行为;
在交互语法中一个交互可以由多个交互环节组成,每个交互环节可以有多个触发和反馈,所以在配置交互时可以配置每个环节,每个环节都是数组,都有trigger和action; 交互环节有:
showEnable:标识交互可以发生start:交互开始processing: 交互持续end:交互结束rollback:回滚修改tooltip的触发,改成点击绘图区域内部时显示tooltip
chart.interaction('tooltip',{ start:[{trigger:'plot:click',action:'tooltip:show'}] }) trigger触发了一个交互环节的事件名,是所有Chart支持的事件action触发的反馈,可以是字符串也可以是数组,是所有内置和用户自定义的Action,参考交互反馈Action列表 字符串由‘actionName:method’组成数组时可以使用相同的action,也可以使用不同的action,例如[‘element-active:clear’,‘element-active:active’,‘mask:clear’]除了trigger和action之外还有其他几个可选属性
isEnable(context):是否可以触发callback(context):触发后执行完所有action的方法后会调用回调函数once:boolean,是否在一个环节内仅能执行一次debounce:延迟执行 wait:等待时间immediate:是否马上执行 throttle 增加阀值,控制执行的频率 wait:等待时间leading:是否马上执行trailing:执行完毕后再执行一次debounce和throttle的机制交互的上下文提供了一系列进行判定条件的函数,帮助用户在isEnable中方便的判断,以上面tooltip的为例,如果不适用’plot:click’事件而仅使用’click’事件时需要判定是否在绘图区域内判定
chart.interaction('tooltip',{ start:[{ trigger:'click', isEnable(context) { return context.isInPlot();//返回事件触发时是否在view内部 //context详情 interface.d.ts 1597行 }, action:'tooltip:show' }] })G2中所有的交互都是通过registerInteraction方法注册的
G2.reisterInteraction(name,cfg)交互列表过多,详情参考这里
G2提供的Action有:
鼠标的ActionChart/View上的Action图标元素Element的Action组件的Action数据操作的Action辅助交互图形的Action详情参考这里
G2中并没有特定的图表类型(柱状图,散点图,折线图等)的概念,所有的图表都是通过组合一系列图形语法元素绘制而成的; G2默认提供了9种几何标记:
geometry类型描述point点,用于绘制各种点图path路径,无序的点连接而成的一条线,常用语路径图的绘制line线,点按照x轴连接成一条线,构成线图area填充线图跟坐标系之间构成区域图,也可以指定上下范围interval使用矩形或者弧形,用面积来表示大小关系的图形,一般构成柱状图,饼图等图表polygon多边形,可以用来构建色块图,地图等图表类型edge两点之间的链接,用于构建树图和关系图中的边、流程图中的连接线schema自定义图形,用于构建箱型图(或者称箱须图)、蜡烛图(或者称K线图,股票图)等图表heatmap用于热力图的绘制对于每一种几何标记来说,在绘制时还可以对应不同的形状(shape) G2中各种geometry内置提供的shape类型
geometry类型shape类型解释pointcircle,square,bowtie,diamond,hexagon,triangle,triangle-down,hollow-circle,holllow-square,hollow-bowtie,hoolow-diamond,hollow-hexagon,hollow-triangle,hollow-triangle-down,cross,tick,plus,hyphen,linehollow开头的图形都是空心的lineline,dot,dash,smooth,hv,vh,hvh,vhvhv,vh,hvh,vhv用于绘制阶梯线图areaarea,smooth,line,smooth-linearea和smooth-line是填充内容的区域图,其他图表是空心的线图intervalrect,hollow-rect,line,tick,funnel,pyramidhollow-rect是空心的矩形,line和tick都是线段,funnel用于绘制漏斗图;pyramid用于绘制金字塔图polygonpolygonschemabox,candleedgeline,vhv,smooth,arcvhv:直角折线,arc:弧线分为笛卡尔坐标系,极坐标系,带权重和不带权重四种情况G2中slider作为数据范围的选择插件,适用于大数据量的图表绘制,帮助用户更好的关注某一范围的数据可视化结果。
如果使用G2 core进行自定义按需引入,可以参考:
import Slider from '@antv/g2/lib/chart/controller/slider'; import { registerComponentController, Chart } from '@antv/g2/lib/core'; // 引入 slider 组件 registerComponentController('slider', Slider); const chart = new Chart({}); chart.option('slider', {end: 0.8});如果是全量引入,那么slider作为G2内置组件,可以直接使用
import { Chart } from '@antv/g2'; const chart = new Chart({}); chart.option('slider', {end: 0.8}); chart.render();Slider全量配置项请参考 文件:@antv/g2/lib/chart/controller/slider.d.ts
HTML5提供了Canvas和SVG两种绘图技术,其中Canvas是基于脚本,通过JavaScript指令来动态绘图,而SVG则是使用XML文档来描述矢量图。 G2默认使用Canvas提供图表的渲染,同时提供SVG以供用户进行选择,用户只需要在创建chart实例时,声明renderer属性即可;
const chart = new Chart({ container:'container', width:500, height:400, renderer:'svg' });Canvas提供的绘图能力更底层,适合做到像素级的图形处理,能动态渲染和绘制大数据量的图形。
SVG抽象层次更高,声明描述式的接口功能更丰富,内置了大量的图形、滤镜和动画等,方便进行文档元素的维护,也能导出为文件脱离浏览器环境使用。
从底层来看,Canvas的性能受画布尺寸影响更大,SVG的性能受图形元素个数影响更大。 在小数据量的情况下,SVG的方案通常内存占用会更小,做缩放、平移等操作的时候玩玩帧率也更高
全量引入的情况下:
import { Chart } from '@antv/g2'; const chart = new Chart({ container: 'container', width: 400, height: 300, renderer: 'svg', });按需引入的情况下:
// 注册 G engine import * as CanvasEngine from '@antv/g-canvas'; import * as SVGEngine from '@antv/g-svg'; import { registerEngine } from '@antv/g2/lib/core'; registerEngine('canvas', CanvasEngine); // 注册 Canvas 渲染引擎 registerEngine('svg', SVGEngine); // 注册 SVG 渲染引擎antv-g2学习手册-上 antv-g2学习手册-中