移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入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. Codeforces Round 882 (Div. 2)

    Codeforces Round 882 (Div. 2) A.The Man who became a God 题目大意 给定一个数组 \({x_1,x_2,⋯,x_n}\) 和一个整数 \(k\) ...

  2. 聚焦Web前端安全:最新揭秘漏洞防御方法

    在 Web 安全中,服务端一直扮演着十分重要的角色.然而前端的问题也不容小觑,它也会导致信息泄露等诸如此类的问题.在这篇文章中,我们将向读者介绍如何防范Web前端中的各种漏洞.[万字长文,请先收藏再阅 ...

  3. 操作系统实验——利用Linux的消息队列通信机制实现两个线程间的通信

    目录 一. 题目描述 二.实验思路 三.代码及实验结果 四.遇到问题及解决方法 五.参考文献 一. 题目描述 编写程序创建三个线程:sender1线程.sender2线程和receive线程,三个线程 ...

  4. 一张图读懂TuGraph Analytics开源技术架构

    TuGraph Analytics(内部项目名GeaFlow)是蚂蚁集团开源的分布式实时图计算引擎,即流式图计算.通过SQL+GQL融合分析语言对表模型和图模型进行统一处理,实现了流.批.图一体化计算 ...

  5. 强化学习 Proximal Policy Optimization (PPO)

    参考: 李宏毅老师课件 PPO = Policy Gradient 从 On-policy 到 Off-policy, 再加一些constraint Policy Gradient Basic Con ...

  6. 全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略

    本教程收集于:AIGC从入门到精通教程汇总 全免费开源,仅需一个域名就可以部署国内的ChatGPT镜像版本. One-Click to deploy well-designed ChatGPT web ...

  7. 使用 Rancher 安装 K8s 集群

    舞台环境 Ubuntu 22.04.2 LTS Docker 24.0.2 2GB RAM或者更多 CPU 2核心或者更多 Rancher 2.6.9 测试环境中,我准备了两台 Ubuntu 服务器, ...

  8. Python连接Neo4j工具比较 Neo4j Driver、py2neo

    Python有许多可以连接Neo4j的库和工具,以下是一些常用的: Neo4j Driver for Python 这是官方提供的Python驱动程序,它使用Cypher查询语言与Neo4j数据库进行 ...

  9. Mybatis plus配置MetaObjectHandler无效

    项目环境 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-b ...

  10. ipmitool配置机器的BMC

    一.设置IP地址 1.确定操作对象 #ipmitool mc info 输出中"Device Revision"是命令的操作对象 2.设置BMC IP # ipmitool -I ...