文章目录
- I. 前言
- echarts、ec-canvas,在小程序中进行数据可视化的意义
- II. 安装ec-canvas
- 1. 下载安装ec-canvas组件
- 2. 配置组件参数
- III. 初识ec-canvas
- 1. echarts在微信小程序中的工作原理
- 2. echarts小程序版的局限性与创新点
- 3. 通过一个简单的示例了解ec-canvas的基本用法
- IV. 使用ec-canvas绘制图表
- 1. 根据echarts各组件属性设置ec-canvas参数
- 2. 配置图表的样式、类型、数据
- 3. 使用`setOption`方法刷新图表
- 4. 修改图表的参数并刷新画面
- V.优化`echarts`小程序版体验
- 1. 图表响应式适配
- 2. echarts小程序版的性能与问题解决方案
- 3. 减少echarts小程序版体积的五种方法
- VI. 结语
- 1. 如何使用ec-canvas实现小程序中的数据可视化
- 2. 小程序版的echarts在性能、使用上的不断优化
I. 前言
echarts、ec-canvas,在小程序中进行数据可视化的意义
Echarts 是一款由百度开发和维护的的数据可视化工具库,其提供了各种类型的图表和交互式组件,同时支持动态数据更新和动画效果等功能。通过使用 Echarts
,用户可以简单、快速地构建可视化图表和交互式组件,帮助用户更好地理解和展示大量的数据信息。而 ec-canvas
是 Echarts
专门针对小程序开发的图表库,通过提供对小程序原生 canvas 属性的封装和优化,从而达到将 Echarts 功能转化为小程序能够识别的 Api,从而实现在小程序中进行数据可视化的目的。
在小程序中进行数据可视化,可以帮助用户直观地展示数据,提高数据解读和分析的效率,同时让用户可以通过简单的手势操作,进行数据的筛选、比较和分析等操作,方便用户对数据的处理和挖掘,进而为用户提供更全面、精准的决策依据,帮助用户更好地理解和处理数据。此外,小程序作为一种轻量级、交互性强的移动应用程序,在访问速度、用户使用习惯等方面相较于传统的 PC 和 Web 端
应用具有更为优越的使用体验。因此,将 Echarts
库和 ec-canvas
组件运用到小程序中,可以充分利用小程序的优点,来实现数据的可视化展示和业务逻辑功能的实现。
II. 安装ec-canvas
1. 下载安装ec-canvas组件
在小程序中使用 echarts 需要下载安装 ec-canvas 组件。
下面简单介绍 ec-canvas 的安装流程。
-
打开 Github ec-canvas 项目页面:
https://github.com/ecomfe/ec-canvas
。 -
点击
Clone
ordownload
,选择Download ZIP
来下载 ec-canvas 组件。 -
解压缩下载的 ZIP 文件,打开解压缩后的文件夹,可以看到其中包含一个名为
ec-canvas
的文件夹,其中包含了 ec-canvas 组件的主要代码。 -
将
ec-canvas
文件夹中的文件复制到您小程序项目的相应目录下,一般为/components/ec-canvas
。 -
在小程序页面的 json 配置文件中添加
"usingComponents"
对象,以便能够在页面中引用 ec-canvas 组件。例如:{ "usingComponents": { "ec-canvas": "/components/ec-canvas/ec-canvas" } }
-
在小程序页面的 wxml 文件中,即可通过标签
<ec-canvas>
引用 ec-canvas 组件。
总之,下载安装 ec-canvas 组件非常简单,只需要在 Github 上下载该组件,并将其导入到小程序项目中即可。
2. 配置组件参数
安装完成 ec-canvas 组件后,需要进行参数配置,才能正确的使用。以下是 ec-canvas 组件的几个主要参数:
canvas-id
: Canvas 的 id,用于在 js 中获取 Canvas 对象。ec-parameter
: 将 echarts 配置信息以 json 类型传入 ec-canvas 组件中,这个参数很重要。disable-scroll
: 是否禁止页面滑动,默认值为 false。
针对这些参数,以下是如何正确地进行配置:
1. 设置 canvas-id
将在小程序页面引用 ec-canvas 组件的标签的 canvas-id
属性设置为一个字符串,名称可以任意指定,例如:
<ec-canvas canvas-id="mychart"></ec-canvas>
2. 设置 echarts 配置信息
将 echarts 的配置信息以 json 形式传入 ec-canvas
组件中。这个配置信息需要在 wxml 中通过绑定 data 值进行传递,例如:
<ec-canvas id='mychart-dom-line'
canvas-id='mychart-line'
ec:canvas-id='mychart-line'
ec:binderror='onError'
ec:show-tooltip='true'
ec:enable-pinch-zoom='true'
ec:touch-move-limit='20'
ec:scale-mode='aspectFit'
ec:animation-duration='500'
ec:categories='{{categories}}'
ec:series='{{series}}'
onInit='initChart'>
</ec-canvas>
上述代码中,绑定了 ec:categories
和 ec:series
两个参数,其中 categories
和 series
分别表示图表的类别信息和数据信息。这些参数的具体含义和用法请参考 echarts 官方文档。
3. 禁止页面滑动
如果不希望通过手势滑动页面来滚动小程序中的 echarts 图表,可以在 ec-canvas
组件上设置 disable-scroll
属性:
<ec-canvas canvas-id="mychart" disable-scroll="{{true}}"></ec-canvas>
经过以上配置后,即可在小程序中愉快的使用 echarts 组件啦!
III. 初识ec-canvas
1. echarts在微信小程序中的工作原理
ECharts 是一个基于 JavaScript 的开源可视化图表库,它可以支持在 Web 应用中使用,并且也可以在移动端应用中进行使用。为了将 ECharts 应用于微信小程序中,需要进行以下步骤:
1. 安装 echarts-for-weixin 库包
npm install echarts-for-weixin --save
2. 导入 echarts 库,并创建图表实例
<canvas id="myChart"></canvas>
const echarts = require('echarts-for-weixin');
const chart = echarts.init(this.selectComponent('#myChart').canvas);
3. 配置图表参数
const options = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data:['销量']
},
xAxis: {
data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
},
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
};
chart.setOption(options);
4. 渲染图表
this.selectComponent('#myChart').canvasToTempFilePath({
success(res) {
console.log(res.tempFilePath);
},
fail(res) {
console.log(res);
},
complete(res) {
console.log(res);
}
}, this);
以上便是使用 ECharts
在微信小程序中进行开发的基本步骤。富有表现力的可视化数据是许多小程序所需的关键业务应用,ECharts
可以提供丰富的体验以及良好的交互设计。
2. echarts小程序版的局限性与创新点
ECharts小程序版相比于Web版有一些局限性。其中主要包括以下几点:
- 图表类型受限: 在小程序中,
ECharts
的支持的图表类型会受到一定程度的限制。 - 静态绘制: 小程序中的
canvas
画布可以通过调用draw方法直接将图表绘制在画布上,但这种绘制方式不支持交互事件的响应。 - 性能限制:小程序本身的功能以及性能受限,使用
ECharts
可能会对小程序整体性能造成一定影响。
但是,ECharts小程序版也有一些创新点:
- 借助微信小程序提供的开发者工具,通过调用微信小程序的API,可以实现小程序与
ECharts
的深度结合,提供更好的用户体验。 - ECharts小程序版的库包体积较小,轻量化特点能更好地适应小程序开发所需。
- 通过集成
ECharts
可视化库,能够实现数据可视化,方便用户对数据进行更具深度的分析。
3. 通过一个简单的示例了解ec-canvas的基本用法
下面是一个简单的示例,用于创建一个柱状图:
1. 在小程序页面的json文件中注册canvas
{
"usingComponents": {
"ec-canvas": "../../components/ec-canvas/ec-canvas"
}
}
2. 在小程序页面中引入echarts库
import * as echarts from '../../utils/echarts.min.js'
3. 在小程序页面wxml文件中放置ec-canvas组件
<ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
4. 在小程序页面js文件中创建图表实例,并进行相关配置与渲染
Page({
data: {
ec: {
onInit: initChart
}
}
})
function initChart(canvas, width, height) {
const chart = echarts.init(canvas, null, {
width: width,
height: height
});
canvas.setChart(chart);
const option = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
axisTick: {
alignWithLabel: true
}
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '直接访问',
type: 'bar',
barWidth: '60%',
data: [10, 52, 200, 334, 390, 330, 220]
}
]
};
chart.setOption(option);
return chart;
}
以上便是通过 ec-canvas
实现一个简单柱状图的流程,具体步骤包括创建canvas
、初始化ECharts
实例、配置ECharts
参数、渲染图表等过程。
IV. 使用ec-canvas绘制图表
1. 根据echarts各组件属性设置ec-canvas参数
ec-canvas会将ECharts实例中的option参数解析为对应canvas的属性来渲染图表。根据不同组件的属性,ec-canvas会将option参数解析为对应的canvas参数。
以下是ec-canvas中使用到的一些属性参数及其对应的ECharts配置项:
- canvas:
canvas
自身的属性,例如id、style
等。 - subtitle: 副标题的相关属性,例如
textStyle
。 - yAxis: 直角坐标系中y轴的相关属性,例如
axisLine、axisTick、axisLabel、splitLine、min、ma
x等。 - xAxis: 直角坐标系中x轴的相关属性,例如
axisLine、axisTick、axisLabel、splitLine
等。 - tooltip: 提示框组件的相关属性,例如
trigger、formatter、axisPointer
等。 - grid: 直角坐标系内绘图网格的相关属性,例如left、right、top、bottom、width、height、containLabel等。
- series: 数据系列的相关属性,例如
symbol、symbolSize、itemStyle
等。
通过在option
参数中设置相应属性,可以改变ECharts
图表的展现形式。例如,可以通过设置xAxis
中的axisLine
、axisTick
以及axisLabel
属性来自定义x轴,通过设置tooltip
属性来定制提示框的样式等。
总之,在使用ec-canvas
中,需要熟悉各个组件的参数属性,以及对应的ECharts配置项,以便将canvas上的图表效果与设计要求相匹配。
2. 配置图表的样式、类型、数据
在echarts
中,通过配置option
对象来配置图表样式、类型、数据。
option
对象是一个包含各种配置参数的json
对象,包含多个属性,每个属性对应不同的配置项,比如:标题、x轴、y轴、数据等。
下面是一个简单的示例,用于创建一个柱状图例子:
// 引入 ECharts 主模块
import * as echarts from '../../ec-canvas/echarts';
Page({
onLoad: function (options) {
this.setData({
ec: {
// 组件 ID
id: 'chart1',
// canvas 宽度,单位为px
width: 360,
// canvas 高度,单位为px
height: 240,
// ECharts配置项
option: {
// 图表的标题
title: {
text: '销售量'
},
// 柱状图
series: [{
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
}
}
});
}
})
在上面的代码中,我们通过在data中设置一个ec对象,然后在onLoad函数中更新这个对象的值。ec对象包含了组件的ID、宽度、高度和option对象。在option中,我们定义了图表的标题和一个柱状图。其中柱状图的数据为一个长度为6的数组,每个值对应一个柱子的高度。
可以看出,通过简单地配置option
对象,我们就可以完成数据的设置和图表的样式定制。可以根据ECharts
的文档和API进一步了解图表类型、数据格式以及各种美化操作。
3. 使用setOption
方法刷新图表
如果需要更新已经绘制的图表,可以使用setOption
方法。
例如,在一个柱状图中,我们可以通过点击按钮,动态地更新数据。
完整的代码示例如下:
import * as echarts from '../../ec-canvas/echarts';
let chart = null;
function initChart(canvas, width, height) {
chart = echarts.init(canvas, null, {
width: width,
height: height
});
canvas.setChart(chart);
const option = {
title: {
text: '销售量'
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [{
type: 'bar',
data: [5, 20, 36, 10, 10, 20, 8]
}]
};
chart.setOption(option);
return chart;
}
Page({
data: {
ec: {
onInit: initChart
}
},
updateChart: function() {
const option = {
series: [{
data: [15, 30, 46, 20, 20, 30, 18]
}]
};
chart.setOption(option);
}
})
在上面代码中,使用initChart
函数初始化图表,设置了初始option
。数据系列中的data用一个长度为7的数组来定义,表示每一个数据点对应的显示值。在updateChart
函数中,通过更改数据系列中的data
数组,用setOption
方法更新图表的数据。当触发按钮点击事件时,调用updateChart
函数实现图表的刷新。只需要更改视图中图表对应的option
,再调用 setOption
方法进行更新即可。
当然,除了数据的更新,你还可以使用 setOption
函数来更新其他样式配置,比如标题、坐标系、图例、标记等。
4. 修改图表的参数并刷新画面
要修改图表参数并刷新画面,可以使用以下两种方式:
方式一:直接更新option
可以使用 chart.getOption()
获取当前图表参数,修改需要修改的属性后,再用 chart.setOption(option)
方法设置当前参数并刷新画面。
例如:
const option = chart.getOption();
option.title.text = "新标题";
option.xAxis[0].data = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
chart.setOption(option);
上述代码中,我们首先使用 getOption
方法获取了当前图表的 option
参数,然后修改了参数中的 title
和 xAxis
,最后使用 setOption
方法将新的参数设置并刷新画面。这里修改了标题和x轴,其他的配置同理。
方式二:通过onInit方法更新option
通过修改onInit方法的调用参数,可以进行视图的刷新和重新绘制。
例如:
let chart = null;
function initChart(canvas, width, height, dpr) {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
this.setData({
chart: chart
});
const option = {
/* ...填写具体配置项 */
};
chart.setOption(option);
}
function updateChart() {
const option = {
/* ...填写修改后的配置项 */
};
this.setData({
ec: {
onInit: initChart.bind(this),
lazyLoad: true,
option: option
}
});
}
如上述代码,我们首先声明了一个chart变量,用于保存图表实例。在onInit方法中,除了常规配置项外,还通过setData方法将创建好的图表实例传给了this.data,这样我们就可以随时获取chart实例进行操作。
在updateChart函数中,通过setData方法将新的option对象传递给了ec-canvas组件,同时在onInit方法中获取最新的option,并进行了重新绘制操作。
注意:在使用这种方式时,需要将 lazyLoad
属性设置为 true
,这样 ec-canvas 组件才会调用 onInit 方法,进行更新操作。
综上,通过修改 option
参数,或者重新调用 onInit 方法,我们就可以更新图表的参数并刷新画面了。不同的修改方式,可以根据具体场景进行选择。
V.优化echarts
小程序版体验
1. 图表响应式适配
ECharts 在支持多种图表类型和丰富的配置选项的同时,也提供了响应式布局方案。
下面是一些常用的 ECharts 响应式适配方案:
- 使用
resize
方法:
通过监听窗口尺寸变化事件,然后使用 chart.resize()
方法重新渲染图表。
import * as echarts from '../../ec-canvas/echarts';
Page({
onLoad: function (options) {
this.setData({
ec: {
id: 'mychart',
option: {},
onInit: function (canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
this.chart = chart;
chart.setOption(this.getOption());
return chart;
}
}
});
},
onReady: function () {
// 监听窗口尺寸变化事件,执行 resize 方法重新渲染图表
wx.onWindowResize(() => {
this.chart && this.chart.resize();
});
},
getOption: function () {
return {...}
},
});
- 使用grid属性指定图表大小:
通过在 grid
属性中指定图表长和宽的百分比,实现图表响应式布局。
const option = {
title: {
text: '响应式布局示例'
},
grid: {
width: '80%', // 宽度占 80%
containLabel: true // 包含刻度标签
},
xAxis: {...},
yAxis: {...},
series: {...}
};
- 使用media数据集:
可以在 option.media
中设置多组属性,这些属性将覆盖option中的配置项。通过配置media数据集,可以根据窗口大小,按照不同的宽度,采用不同的配置项。
const option = {
baseOption: {...},
media: [
{
option: {
grid: {
width: '90%'
},
series: [{
type: 'bar',
barWidth: 20
}]
}
},
{
query: {
minWidth: 800
},
option: {
grid: {
width: '50%'
},
series: [{
type: 'bar',
barWidth: 30
}]
}
}
]
};
在上面的代码中,我们定义了两个media的数据集,分别适用于宽度小于800px和大于800px的场景。通过在media的配置中设置 query
和 option
,可以实现窗口大小判定和对应的配置项设置。
- 使用flex布局:
重头戏来啦!相比于前面的几种方式来说,flex 布局具有更强大的响应式适配能力。
<view class='chart-container'>
<ec-canvas id='mychart-canvas' canvas-id='mychart-canvas' ec="{{ ec }}" />
</view>
.chart-container{
display: flex;
width: 100%;
height: 400rpx;
}
const option = {...}
Page({
...
getOption() {
if (someCondition) {
option.title.text = '第一种配置项';
} else {
option.title.text = '第二种配置项';
}
return option;
}
});
在上面的代码中,我们使用CSS flex布局和onInit中的option配置来实现图表的响应式适配。
具体来说,我们将 ec-canvas
组件放置在一层 div 容器中,然后通过设置它的 display
属性为 flex
,以父容器的宽度为基准,进行图表的自适应展示。
同时我们也可以通过在 getOption()
方法中,对不同的情况返回不同的配置项,以针对不同的屏幕大小进行设置。
2. echarts小程序版的性能与问题解决方案
ECharts 微信小程序版是 ECharts 官方提供的一款专为微信小程序定制和优化的图表库,拥有跨平台使用、数据可视化、图表丰富等特点,同时在性能、稳定性等方面也做了不少优化。
但是,即便是经过了优化,ECharts在微信小程序的使用过程中,也会出现一些问题,例如初始加载慢、过度渲染、内存泄漏等。这里介绍一些常见性能问题及对应解决方案:
1. 初始加载慢
经常会出现由于数据量过大、初始化过程中的复杂计算和渲染等原因,导致图表初始加载过慢的情况。这时可以通过一些措施来缓解这种情况:
- 使用缓存
可以通过在后端缓存数据,前端通过 AJAX
调用数据,然后利用 chart.clear()
和 chart.load()
的数据更新方法来刷新页面。
- 懒加载
可以通过设置 lazyLoad
属性为 true
,当视口进入范围内时才会初始化图表,避免不必要的初始计算和渲染。
- 数据优化
优化单条数据的显示方式,比如横轴坐标的旋转和隐藏、数据的饼图标签重叠等。
2. 过度渲染
过度渲染是指当数据过多时,渲染所需的时间就会变得十分长,导致页面出现卡顿和操作响应不及时等问题。这里有几个解决方案:
- 数据分段
针对数据量大的问题,可以将数据分段展示,比如分段渲染大数据量的折线图、柱状图等。
- 图表共用
将数据分散到多个图表中展示,互不重叠、互相协作,降低单个图表的数据负荷。
- 动态渲染
对于连续-flow 的数据,可以通过动态渲染方式,来减轻一次性渲染的负担,且互动体验不会影响整体性能。
3. 内存泄漏
内存泄漏是一个普遍存在且引发疑难问题的情况,通常会导致页面卡顿,甚至直接崩溃的情况。解决方案可以是手动释放资源、开启回收机制、优化赋值操作等:
- 手动释放
在onUnload
方法中,释放对chart
实例的引用。应避免在视图销毁之前,持有图表实例的引用,以便系统可以释放图表的相关资源。
- 启用分级回收算法
可以在图表初始化的anchorOption
中开启 animationThreshold
配置项,以便可以在不同的动画阈值下显示动画。
- 优化赋值操作
对于复杂的图表或需要 frequent
数据更新的特殊图表类型,可以考虑避免使用直接赋值数据的方式。可以通过合理的数据处理以及增量更新等方式来减轻渲染压力。
以上是一些常见的问题和解决方案,但在实际开发过程中,遇到的问题和解决方案还有很多,也需要根据实际情况进行优化,以提高用户体验和性能。
3. 减少echarts小程序版体积的五种方法
VI. 结语
1. 如何使用ec-canvas实现小程序中的数据可视化
在微信小程序中,由于代码体积的限制,我们需要考虑对 ECharts 进行体积优化,以便能够更好地适应微信小程序的开发。
以下是几个常见的 ECharts 体积优化方案:
1. 异步加载:
可以使用 importScript
或者 wx.request
异步加载,只有当数据请求成功后,才会进行图表的渲染,从而实现按需加载。这种方式不仅可以缩短初始加载时间,还可以根据需求动态加载图表模块。
2. 按需引入:
ECharts 库包含了很多组件和功能,但实际应用场景中,并不一定都需要用到。因此,按需引入需要的组件,可以有效地减小 ECharts 库的体积。可以通过在page.json中配置:
{
"usingComponents": {
"ec-canvas": "../../components/ec-canvas/ec-canvas"
}
}
或者在页面内使用import动态引入:
import * as echarts from '../../ec-canvas/echarts';
import 'echarts/lib/chart/pie';
3. 离线打包:
通过使用 ECharts 的离线打包功能(Optimized ECharts),可以在保证功能不变的前提下,将体积从原来的 1.1MB 降低到 300KB 左右。在官网上下载离线打包文件,然后直接引入即可。
4. 使用 gzip:
在使用 ECharts 库时,提供给前端的 JS 文件可以通过压缩(gzip)来减小体积。服务器返回时,先判断用户的请求是否支持 gzip 压缩,如果支持,则返回 gzip 压缩后的 JS 文件。
5. 使用 CDN:
在开发过程中,如果遇到体积过大的 ECharts 库,可以考虑使用 CDN。CDN 服务商会对一些文件进行大量的缓存,以备下一次使用。这种方式可以缓解压缩包文件过大的问题,将 ECharts 库的体积大大减小。
综上所述,五种方法可以帮助我们在微信小程序中减少 ECharts 库的体积,提高用户的使用体验及性能,可以根据实际情况选择其中一种或多种方法进行实现。
2. 小程序版的echarts在性能、使用上的不断优化
ECharts
微信小程序版是 ECharts
官方提供的一款专为微信小程序定制和优化的图表库。在开发者不断的反馈和贡献下,ECharts
小程序版也在不断地进行性能和使用上的优化。
下面是ECharts小程序版的性能和使用上的不断优化:
1. 增加懒加载机制:
懒加载机制是指,当组件进入可视区域时才进行初始化绘制。这样既能够优化初始加载性能,又能避免引起过度渲染等问题,提高用户体验。
2. Layout性能优化:
对于常见图表类型(如折线图、柱状图等),通过 Layout
布局调整、优化和缓存,可以在不影响图表展示效果的前提下,大大提高渲染性能。
3. 提高绘图性能:
通过 Canvas
的底层操作和微信小程序中的自定义组件技术,ECharts
微信小程序版大大提高了绘制性能和渲染效果。
4. 完善文档和示例:
ECharts 微信小程序版还提供了完善的文档和大量示例代码,可以帮助开发者更好地掌握使用技巧和最佳实践。
5. 主动响应问题和需求:
ECharts
小程序版的开发团队一直密切关注开发者的反馈和需求,通过 GitHub Issue
等渠道,积极响应问题和需求,及时提供技术支持和解决方案。
综上所述,ECharts
微信小程序版在性能和使用方面的不断优化,为开发者提供了更好的体验和更高的效率,帮助开发者更好地完成微信小程序的数据可视化需求。