微信小程序

wx-charts:基于canvas绘制图表

2018-06-21  本文已影响0人  极客小寨

每日推荐

这篇文章主要介绍了微信小程序图表插件(wx-charts)实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

https://github.com/xiaolin3303/wx-charts

本文作者

作者:xiaolin3303

链接:https://github.com/xiaolin3303

前言

最近由于工作需要,将应用里的部分功能需要画图表,于是就发现了wx-charts,微信小程序图表工具,charts for WeChat small app,基于canvas绘制,体积小巧。希望对大家有些帮助吧!

1.wx-charts介绍与图表类型

支持的图标类型:

参数说明:

opts Object

opts.canvasId String required 微信小程序canvas-id

opts.width Number required canvas宽度,单位为px

opts.height Number required canvas高度,单位为px

opts.title Object (only for ring chart)

opts.title.name String 标题内容

opts.title.fontSize Number 标题字体大小(可选,单位为px)

opts.title.color String 标题颜色(可选)

opts.subtitle Object (only for ring chart)

opts.subtitle.name String 副标题内容

opts.subtitle.fontSize Number 副标题字体大小(可选,单位为px)

opts.subtitle.color String 副标题颜色(可选)

opts.animation Boolean default true 是否动画展示

opts.legend Boolen default true 是否显示图表下方各类别的标识

opts.type String required 图表类型,可选值为pie, line, column, area, ring

opts.categories Array required (饼图、圆环图不需要) 数据类别分类

opts.dataLabel Boolean default true 是否在图表中显示数据内容值

opts.dataPointShape Boolean default true 是否在图表中显示数据点图形标识

opts.xAxis Object X轴配置

opts.xAxis.disableGrid Boolean default false 不绘制X轴网格

opts.yAxis Object Y轴配置

opts.yAxis.format Function 自定义Y轴文案显示

opts.yAxis.min Number Y轴起始值

opts.yAxis.max Number Y轴终止值

opts.yAxis.title String Y轴title

opts.yAxis.disabled Boolean default false 不绘制Y轴

opts.series Array required 数据列表

数据列表每项结构定义

dataItem Object

dataItem.data Array required (饼图、圆环图为Number) 数据

dataItem.color String 例如#7cb5ec 不传入则使用系统默认配色方案

dataItem.name String 数据名称

dateItem.format Function 自定义显示数据内容

2.wx-charts中的方法和事件

方法:

事件:

如何使用事件:

let chart = new wxCharts(...);chart.addEventListener('renderComplete', () => {    // your code here});
3.Example

pie chart

image image
var wxCharts = require('wxcharts.js');
new wxCharts({
    canvasId: 'pieCanvas',
    type: 'pie',
    series: [{
        name: 'cat1',
        data: 50,
    }, {
        name: 'cat2',
        data: 30,
    }, {
        name: 'cat3',
        data: 1,
    }, {
        name: 'cat4',
        data: 1,
    }, {
        name: 'cat5',
        data: 46,
    }],
    width: 360,
    height: 300,
    dataLabel: true
});

ring chart

image image
new wxCharts({
    canvasId: 'ringCanvas',
    type: 'ring',
    series: [{
        name: '成交量1',
        data: 15,
    }, {
        name: '成交量2',
        data: 35,
    }, {
        name: '成交量3',
        data: 78,
    }, {
        name: '成交量4',
        data: 63,
    }],
    width: 320,
    height: 200,
    dataLabel: false
});

line chart

image image.gif
new wxCharts({
    canvasId: 'lineCanvas',
    type: 'line',
    categories: ['2012', '2013', '2014', '2015', '2016', '2017'],
    series: [{
        name: '成交量1',
        data: [0.15, 0.2, 0.45, 0.37, 0.4, 0.8],
        format: function (val) {
            return val.toFixed(2) + '万';
        }
    }, {
        name: '成交量2',
        data: [0.30, 0.37, 0.65, 0.78, 0.69, 0.94],
        format: function (val) {
            return val.toFixed(2) + '万';
        }
    }],
    yAxis: {
        title: '成交金额 (万元)',
        format: function (val) {
            return val.toFixed(2);
        },
        min: 0
    },
    width: 320,
    height: 200
});

columnChart

image
new wxCharts({
    canvasId: 'columnCanvas',
    type: 'column',
    categories: ['2012', '2013', '2014', '2015', '2016', '2017'],
    series: [{
        name: '成交量1',
        data: [15, 20, 45, 37, 4, 80]
    }, {
        name: '成交量2',
        data: [70, 40, 65, 100, 34, 18]
    }],
    yAxis: {
        format: function (val) {
            return val + '万';
        }
    },
    width: 320,
    height: 200
});

areaChart

image.gif image.gif
new wxCharts({
    canvasId: 'areaCanvas',
    type: 'area',
    categories: ['2016-08', '2016-09', '2016-10', '2016-11', '2016-12', '2017'],
    series: [{
        name: '成交量1',
        data: [70, 40, 65, 100, 34, 18],
        format: function (val) {
            return val.toFixed(2) + '万';
        }
    }, {
        name: '成交量2',
        data: [15, 20, 45, 37, 4, 80],
        format: function (val) {
            return val.toFixed(2) + '万';
        }
    }],
    yAxis: {
        format: function (val) {
            return val + '万';
        }
    },
    width: 320,
    height: 200
});

radarChart

[图片上传失败...(image-b73a18-1529549912627)]

new wxCharts({
    canvasId: 'radarCanvas',
    type: 'radar',
    categories: ['1', '2', '3', '4', '5', '6'],
    series: [{
        name: '成交量1',
        data: [90, 110, 125, 95, 87, 122]
    }],
    width: 320,
    height: 200,
    extra: {
        radar: {
            max: 150
        }
    }
});
4.wx-charts自适应宽度问题

由于无法获取到canvas的大小尺寸,故图表工具需要调用者传入widthheight来主动告知。

各类终端的屏幕大小有差异,如何来让wx-charts自适应屏幕的尺寸呢,下面给出一种方法。

比如我们的需求是图表横向铺满屏幕的宽度

wxss

.canvas {        width: 100%;        height: 200px;}

wxml

<view>    <canvas canvas-id="wxChartCanvas" class="canvas"></canvas></view>

js

// 调用API getSystemInfoSync 获取设备信息
// 这里使用同步获取,也可以使用异步方式 getSystemInfo......
let windowWidth = 320;
try {    
    let res = wx.getSystemInfoSync();
    windowWidth = res.windowWidth;
} catch (e) {    
    // do something when get system info failed
}new Charts({    
    ...
    width: windowWidth,
    height: 200
});

同样的,如果需求中canvas与屏幕有一定的间距,还是先获取屏幕的宽度然后减去间距等计算出画布的实际宽度、高度传递给wx-charts即可。

5.wx-charts项目中如何使用
myAppPage.js
// 路径是wxCharts文件相对于本文件的相对路径
var wxCharts = require('./utils/wxcharts.js');
Page({
    ...
    onLoad: function() {
        new wxCharts({
            ...
        });
    }
});

【极客小寨】:关注、交流、分享 , 关于Geekxz的那些事儿

○更多分享,请持续关注“极客小寨”微信公众号

原文:https://github.com/xiaolin3303/wx-charts

上一篇下一篇

猜你喜欢

热点阅读