移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能。

基础使用

首先在GitHub上下载echarts

地址:https://github.com/ecomfe/echarts-for-weixin/tree/master

下载项目

解压压缩包,将ec-canvas文件夹放到我们的项目中

在需要使用的页面引入echarts

{
"usingComponents": {
"ec-canvas": "/ec-canvas/ec-canvas"
}
}

在页面中使用

<view class="line_chart">
<ec-canvas class="chart" id="charts" canvas-id="mychart-line" ec="{{ ec }}"></ec-canvas>
</view>

先给echarts的父级元素设置高度

.line_chart {
width: 100%;
height: 550rpx;
background: #fff;
}

然后就可以使用了

// 引入 echarts 文件,这里路径一定要正确,就是ec-canvas -> echart.js
import * as echarts from '../../../ec-canvas/echarts'; // 定义 initChart 方法
function initChart(canvas) {
const chart = echarts.init(canvas, null, {
height: 250, // 图表高
// width: 100 // 图标宽
}); canvas.setChart(chart); // 此为配置项。配置图表展现样式与数据
var option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: 'line'
}
]
}; chart.setOption(option); return chart;
} Page({
/**
* 页面的初始数据
*/
data: {
// 此处的ec名称与wxml结构中命名保持一致
ec: {
// 使用 onInit 方法定义
onInit: initChart
}
}, /**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
})

echarts中,配置项与echarts文档中的配置项相同,按照官网的配置项进行开发即可。

配置项手册:https://echarts.apache.org/zh/option.html


动态渲染echarts

我们会根据业务场景,传入不同的数据进行动态渲染echarts,那么在这里charts实例就必须配置为全局

var chart = null; // 重要-保存chart为全局实例
// initChart必须为全局函数
function initChart(canvas) {
chart = echarts.init(canvas, null, {
height: 250,
});
canvas.setChart(chart);
return chart;
}

当你的数据变化后,重新渲染echarts

 data: {
ec: {
onInit: initChart
}
}, getData() {
return { // 你配置的的options数据...... };
}, getCharts() {
setTimeout(() => {
// 由于chart被你定义为全局,所以这里可以直接获取
// 通过setOption设置options数据,刷新图标
chart.setOption(this.getData(), true)
}, 1500)
}

解决真机文字阴影

options配置中添加

   tooltip: {
textStyle: {
textShadowBlur: 10, // 去掉文字阴影
textShadowColor: 'transparent', // 去掉文字阴影
},
},

解决图标模糊问题

在真机中echarts可能会出现分辨率低,图形模糊的情况,此时我们需要获取设备像素比给echarts做初始化设置。

微信小程序获取设备信息:wx.getSystemInfo

function initChart(canvas) {
// 获取设备像素比
const getPixelRatio = () => {
let pixelRatio = 0
wx.getSystemInfo({
success: function (res) {
pixelRatio = res.pixelRatio
},
fail: function () {
pixelRatio = 0
}
})
return pixelRatio
}
var dpr = getPixelRatio(); // 像素比 chart = echarts.init(canvas, null, {
height: 250,
devicePixelRatio: dpr // 设置初始化像素比
});
canvas.setChart(chart);
return chart;
}

此时图表的像素就会按照设配像素比进行渲染

另外

1、你可以将echarts封装成组件,通过observers监听数据的变化来实现echarts的动态渲染。

2、在渲染层面,你可以将 legendlabel 调色盘series拆开,这样可以方便你更好的管理数据。

3、微信小程序有分包限制,在这里我做的是echarts包的直接下载,可能会占一些体积,你可以在echarts官网上选择在线订制,只下载你需要的图表解来减少包的体积,官网:在线订制


如果你觉得本文章不错,欢迎点赞、收藏、转发哦~

阅读其它:

微信小程序文件预览和下载-文件系统

微信小程序动态生成表单来啦!你再也不需要手写表单了!

微信小程序用户隐私API

微信小程序-支付

微信小程序登录流程与实现

关于微信小程序中如何实现数据可视化-echarts动态渲染的更多相关文章

  1. 微信小程序中使用ECharts 异步加载数据 实现图表

    <!--pages/bar/index.wxml--> <view class="container"> <ec-canvas id="my ...

  2. 在微信小程序中使用富文本转化插件wxParse

    在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个 ...

  3. 微信小程序中的组件使用1

    不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...

  4. 全栈开发工程师微信小程序-中(下)

    全栈开发工程师微信小程序-中(下) 微信小程序视图层 wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元. // 绑定数据 index.wxml <view> ...

  5. 全栈开发工程师微信小程序-中(中)

    全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...

  6. 全栈开发工程师微信小程序-中

    全栈开发工程师微信小程序-中 多媒体及其他的组件 navigator 页面链接 target 在哪个目标上发生跳转,默认当前小程序,可选值self/miniProgram url 当前小程序内的跳转链 ...

  7. 微信小程序 WXS实现json数据需要做过滤转义(filter)

    前言 最近有在做小程序开发,在开发的过程中碰到一点小问题,描述一下先. 本人在职的公司对于后台获取的 json 数据需要做过滤转义的很多,不同的状态码会对应不同的文字,但是在微信小程序中又没有类似 v ...

  8. 在微信小程序中使用LeanCloud(一)

    之前学习了微信小程序前端,使用到LeanCloud线上数据库 [传送门].作为一个前端开发人员,了解后端及数据库是学习工作的需要. LeanCloud直接登录,未注册直接创建账户.它是一款免费的线上数 ...

  9. 微信小程序中this指向作用域问题this.setData is not a function报错

    在微信小程序中我们一般通过以下方式来修改data中的数据 this.setData({ index1: e.detail.value }) 比如在函数里面修改数据 bindFaChange1: fun ...

  10. 微信小程序中使用Async-await方法异步请求变为同步请求

    微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading等.如果需要同步处理,可以使用如下方法: 注意: Async ...

随机推荐

  1. 使用LabVIEW 实现物体识别、图像分割、文字识别、人脸识别等深度视觉

    前言 哈喽,各位朋友们,这里是virobotics(仪酷智能),这两天有朋友私信问之前给大家介绍的工具包都可以实现什么功能,最新的一些模型能否使用工具包加载,今天就给大家介绍一下博主目前使用工具包已经 ...

  2. MIT6.s081/6.828 lectrue4:page tables 以及 Lab3 心得

    不管是计算机组成还是操作系统,虚拟内存都是其中的重要内容,所以这一节我会结合 CSAPP 第九章:虚拟内存 来一起复习(顺便一说,CSAPP 这一节的 lab 是要求设计一个内存分配器,也是很有意思的 ...

  3. Andrew Ng 机器学习&深度学习课程 代码作业解答 集合

    写在最前 ​ 2018年是对自己来说是崭新的一年,在过去的3个多月里,从最基础的lr, 学到现在的LSTM, GAN..感觉第一次追上了计算机科学飞速发展的浪潮.虽然很多地方都仍是一知半解,但时间还长 ...

  4. Elasticsearch之常用术语

    一. 数据库和ES简单类比 关系型数据库 表(Table) 行(Row) 列(Cloumn) Schema SQL Elasticsearch 索引(Index) 文档(Document) 字段(Fi ...

  5. Storm整合Kafka Java API源码

    1.Maven项目的pom.xml源码如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...

  6. 深入理解HTTP的基础知识:请求-响应过程解析

    首先,我们从网络协议的最顶层开始讲解,即应用层.在网络通信中,应用层是最接近用户的一层,它负责为特定的网络应用提供服务和功能.应用层协议定义了数据交换的规则和格式,以便不同的应用程序能够相互通信和交换 ...

  7. WebAssembly实践指南——C++和Rust通过wasmtime实现相互调用实例

    C++和Rust通过wasmtime实现相互调用实例 1 wasmtime介绍 wasmtime是一个可以运行WebAssembly代码的运行时环境. WebAssembly是一种可移植的二进制指令集 ...

  8. Python爬虫如何使用代理IP进行抓取

    前言 Python爬虫是一种非常强大的工具,可以用于抓取各种网站的数据.但是,在一些情况下,我们需要使用代理IP来完成数据抓取,如绕过IP限制或保护隐私信息等.本文将介绍如何使用Python爬虫抓取数 ...

  9. PLC通过Modbus转Profinet网关连接变频器控制电机案例

    在本案例中,通过使用Modbus转Profinet网关(XD-MDPN100),PLC可以通过Profinet协议与变频器进行通信和控制.这样,PLC可以实现对电机的转速调节.启停控制等功能. 同时, ...

  10. 在deepin上使用Fleet开发SpringBoot 3.0.0项目

    前言 Fleet被称为是由 JetBrains 打造的下一代 IDE,目前出于公测状态,可以免费下载使用. SpringBoot 3.0.0最小支持是JDK 17,这或许是对于JDK8的断舍离迈出的重 ...