简介

G2-mobile是G2的一个子集,提供更为精简的功能,供移动端使用。G2-mobile的使用方法与G2相似。

API

new Chart(cfg) 创建图表

  • cfg 图表的配置项:
    • id: 画布 canvas的id
    • margin: 画布内部的边框,可以是数组[top,right,bottom,left] 也可以是一个数字
<canvas id="c1" style="width: 400px; height: 400px;"></canvas>
var chart = new Chart({
  id: 'c1'
});

注意:画布的宽高不再使用配置项,直接在canvas标签中设置

chart.source(data, colDefs) 设置、更改数据源和数据字段

  • data 图表的数据,普通的JSON数组
  • colDefs: 列定义,定义对应的度量信息,支持的度量的类型有:数字类型(linear)、分类类型(cat)、和时间类型(timeCat)。
var data = [
  {a: '1', b: 123}
];
var defs = {
  b: {
    min: 0,
    tickInterval: 10
  }
}

chart.source(data, defs);

更详细的配置和使用,请参见 Scale API中对数字类型(linear)、分类类型(cat)、和时间类型(timeCat)的介绍

chart.axis(dim, cfg) 设置坐标轴配置项

  • dim 坐标轴对应的字段
  • cfg 坐标轴支持的配置信息
    • grid 栅格线的配置项,符合canvas图形属性, 支持函数function(text, index) 返回栅格的配置项
    • line 坐标轴轴线,符合canvas图形属性
    • label 坐标轴的文本,符合canvas的文本属性, 支持函数function(text, index) 返回文本的配置项
    • labelOffset 文本距离坐标轴的位置
    • tickLine 坐标轴上刻度线的配置信息,除了符合canvas图形属性外,还有value(刻度线长度)属性
chart.axis('a',false); // 不显示a字段对应的坐标轴
chart.axis('a', {
  grid: {
    strokeStyle: 'red'
  },
  line: {
    strokeStyle: '#ccc'
  },
  label: {
    textBaseline: 'middle',
    font: '30px sans-serif',
    fillStyle: '#333'
  },
  labelOffset: 20,
  tickLine: {
    value: 10,
    strokeStyle: '#ccc'
  },
});

chart.coord(type, cfg) 坐标系的配置信息

  • type 支持笛卡尔坐标系(rect)和极坐标系(polar)
  • cfg 坐标系支持的配置信息
    • transposed 坐标系的x,y轴是否交换,可以将垂直的柱状图转换成水平的柱状图
    • startAngle: 极坐标系的起始角度
    • endAngle: 极坐标系的结束角度
    • inner: 内部坐标系起始点的半径,[0 - 1]
chart.coord('polar', {
  inner: 0.6,
  startAngle: -Math.PI / 2,
  endAngle: Math.PI * 3 / 2
});

chart.<geom>().<attr>(dim, callback) 添加图层

  • geom 目前支持的图表类型有: 点图(point),线图(line),柱状图/饼图(interval),区域图(area),蜡烛图(schema)
  • attr 目前支持的方法有: position,color,size 和 shape
  • color,size,shape 支持callback方法
  • shape: 不同的 geom 几何图形对象支持的 shape 形状如下:
geom 类型 shape 类型 解释
point 'circle','rect'
line 'line','smooth','dash' dash :虚线,smooth: 平滑线
area 'line','smooth'
 chart.point().position('a*b').color('c', function(value){
    if(value === '1') {
      return 'red';
    } else {
      return 'blue';
    }
 }).size(3).shape('city', function(city) {
    if (city === 'beijing') {
      return 'line';
    }
    if (city === 'hangzhou') {
      return 'dash';
    }
  });

自定义shape:

  • registShape(geomName, shapeName, cfg):注册图形
  • 参数
    • geomName 几何标记名
    • shapeName 注册的具体图形名
    • cfg 配置
  • getShapePoints(cfg):自定义具体标记点
  • 参数:
    • cfg.x: x数据
    • cfg.y: y数据
    • cfg.y0: x轴的y坐标
    • cfg.size: 大小数据
  • 返回
    • 0-1的points数据
  • drawShape(cfg,canvas):自定义最终绘制
  • 参数

    • cfg 包含points数据和映射后的属性
    • canvas 图形容器
    var Shape = G2.Shape;
    Shape.registShape(/* geomName */, /* shapeName */, { // 向Shape工厂注册某个geom的一个shape
    getShapePoints: function( /* cfg */ ) { // 自定义具体标记点
    },
    drawShape: function( /* cfg, canvas*/ ) { // 自定义最终绘制,无需返回
    }
    });

    更详细的配置和使用,请参见 Geom API中对图表类型和方法的介绍

chart.guide() 辅助元素

  • guide目前支持的辅助类型有:折线(line)、弧线(arc)、长方形(rect)文字(text)和自定义(html),其中line、arc、rect是提前绘制在背景上,text和html是最后绘制在图形上
  • 自定义html的参数如下:
    • point: 放置html的坐标点
    • html: html文本
    • cfg: 配置信息,支持对齐(align)和偏移(offset)
  • 对齐方式:支持tr、tc、tl、br、bc、bl、lc、rc、cc9点对齐

var point = ['周日',28];
var html = "<div style='border-radius: 12px;border: none;width: 22px;height: 22px;background-color: rgba(102, 182, 241, 0.5);'></div>";
var cfg = {
  align: 'cc',
  offset: [-5,-5]
}

chart.guide().html(point,html,cfg);

折线(line)、弧线(arc)、文字(text)、长方形(rect)的配置和使用,请参见 Chart API

chart.animate() 动画

  • animate目前支持的动画类型有:水平方向的平铺(waveh)、环形平铺(wavec)、x轴上的缩放(scalex)、y轴上的缩放(scaley)、x和y轴同时缩放(scalexy)
  • 动画降频:配置全局变量Global.animateReduceMultiple(动画降频倍数,默认为1)

    chart.animate().scalex();

chart.render() 绘制图表

chart.clear() 清空图表

chart.getPosition(record) 获取位置信息

  • 将数据传入图表,返回画布上点的位置

chart.getRecord(point) 获取数据值

  • 将画布上的点传入图表,返回数据值

chart.getSnapRecord(point) 获取纵切面交点的数据集

  • 将画布上的点传入图表,返回纵切面交点的数据集数组

G2-mobile不支持的图形绘制属性:

  • fillOpacity
  • strokeOpacity

全局属性

Global

var axisLineColor = '#999999';
var lineColor = '#E9E9E9';
var defaultAxis = {
  label: {
    fillStyle: '#979797',
    font: '20px san-serif',
    offset: 6
  },
  line: {
    stroke: lineColor,
    lineWidth: 1
  },
  grid: {
    stroke: lineColor,
    lineWidth: 1
  },
  tick: null
};
var defaultFont = {
  fontStyle: '',
  fontVariant: '',
  fontWeight: '',
  fontSize: '10px',
  fontFamily: '"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", SimSun, "sans-serif"'
};

var Global = {
  // 大小
  sizes: {
    min: 1,
    max: 10
  },
  // 预先定义的度量
  scales: {
    nice: true
  },
  // 宽度
  widthRatio: { // 宽度所占的分类的比例
    column: 1 / 2, // 一般的柱状图占比 1/2
    rose: 0.999999,
    multiplePie: 3 / 4
  },
  // 动画降频倍数
  animateReduceMultiple: 1// 皮肤
  defaultFont: defaultFont,
  pixelRatio: 1,
  margin: [40, 40, 40, 40],
  colors: ['#4E7CCC', '#36B3C3', '#4ECDA5', '#94E08A', '#E2F194', '#EDCC72', '#F8AB60', '#F9815C', '#EB4456', '#C82B3D'],
  axis: {
    bottom: Util.mix(true, {}, defaultAxis, {
      line: {
        stroke: axisLineColor
      },
      label: {
        textBaseline: 'hanging',
        offset: 12
      },
      gridAttrs: {},
      grid: function(text, index, total) {
        if (index === 0 || index === total - 1) {
          return null;
        }
        return Util.mix({}, defaultAxis.grid, Theme.axis.bottom.gridAttrs);
      }
    }),
    left: Util.mix(true, {}, defaultAxis, {
      label: {
        textAlign: 'end'
      },
      line: null,
      tick: null
    }),
    right: Util.mix(true, {}, defaultAxis, {
      label: {
        textAlign: 'start'
      },
      line: null,
      tick: null,
      grid: null
    }),
    circle: Util.mix(true, {}, defaultAxis, {
      line: {
        stroke: axisLineColor
      }
    }),
    radius: Util.mix(true, {}, defaultAxis, {})
  }
};

module.exports = Global;