【echarts】手把手喂饭教学!最容易懂的微信小程序 echarts 项目实践入门教程

news2024/7/5 23:55:41

前言:echarts是一个使用 canvas 制作图表的组件库,是前端中最常见的数据可视化( DashBoard ) 工具之一。相信很多同学都已经接触过了,但一直局限于使用官网的模板,无法完成个性化的精美图表。如果你也正被 无法使用echarts完成个性化图表 这个问题困扰着,那么就接着往下看吧!

温馨提示:本教程将手把手实践一个微信小程序 echarts 个性化图表,包含图表个性化样式、更新图表、事件与行为

首先放上官方微信小程序的 echarts demo 项目地址:https://github.com/ecomfe/echarts-for-weixin
我们需要将 echarts demo 项目下载下来

项目初始化

首先微信小程序初始化项目,如下图所示
在这里插入图片描述
然后打开我们下载的官方 echarts demo 项目,将 ec-canvas 文件夹复制到我们的小程序项目目录下。
最终项目目录结构,和小程序展示图如下图所示
在这里插入图片描述
然后,我们来修整一下:

  1. index.wxml、index.wxss、app.wxss 的代码全部删除
  2. index.js中的代码只保留 data 和onload 生命周期
    Page({
      data: {
    
      },
      onLoad() {
      },
    })
    
  3. index.json 中引入 ec-canvas 文件
    {
      "usingComponents": {
          "ec-canvas": "../../ec-canvas/ec-canvas"
      }
    }
    

运行echarts图表

接下来,我们将运行一个 echarts 最基础的饼图,就如官方 demo 一样,直接上代码:

//index.wxml 
<view class="container">
    <ec-canvas id="mychart-dom-pie" canvas-id="mychart-pie" ec="{{ ec }}"></ec-canvas>
</view>
// index.wxss
.container {
    width: 100%;
    min-height: 100vh;
}

#mychart-dom-pie {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
}
// index.js
import * as echarts from '../../ec-canvas/echarts';

function initChart(canvas, width, height, dpr) {
    const chart = echarts.init(canvas, null, {
        width: width,
        height: height,
        devicePixelRatio: dpr // new
    });
    canvas.setChart(chart);

    var option = {
        backgroundColor: "#ffffff",
        series: [{
            label: {
                normal: {
                    fontSize: 14
                }
            },
            type: 'pie',
            center: ['50%', '50%'],
            radius: ['20%', '40%'],
            data: [{
                value: 55,
                name: '北京'
            }, {
                value: 20,
                name: '武汉'
            }, {
                value: 10,
                name: '杭州'
            }, {
                value: 20,
                name: '广州'
            }, {
                value: 38,
                name: '上海'
            }]
        }]
    };

    chart.setOption(option);
    return chart;
}
Page({
    data: {
        ec: {
            onInit: initChart
        }
    },
    onLoad() {},
})

至此,我们就在微信小程序里运行起了 echarts 饼图的基础示例,接下来要上强度啦!(效果出不来的,注意 index.json 组件引入对不对、app.wxss代码是否删除)
在这里插入图片描述

个性化图表样式

首先放上 echarts 官方的配置项文档地址:https://echarts.apache.org/zh/option.html#title,你会经常需要用到它。

终于运行起了 echarts 饼图的demo,但仅仅依靠官方的 demo 是无法完成我们甲方那天马行空的想象和个性化十足的设计图的。我最喜欢从项目下手,一步到位教人如何完成一个echarts图表需求,所以接下来我来带大家实践一个设计图。

需求设计图

如下图所示,你的甲方丢给你了一个圆环图,你需要实现该图表并带有交互效果。
在这里插入图片描述
好的,收到需求,现在我们正式开始!

我们可以看到,手上的 demo 跟这个图表差距是非常大的。但我们要坚定一件事,就是我们通过echarts文档,一定能把它做好!

删除文本标签 label

首先我们看到,我们的 demo 上有一些 上海、广州、杭州,这些文字标签,设计图上是没有的。那我们怎么去掉呢?按下图所示,打开找到 label 选项,(关于饼图的个性化设置都在这里可以找到)

地址:https://echarts.apache.org/zh/option.html#series-pie.label
在这里插入图片描述
这样我们就找到了参考文档。下面我们要开始更改代码了:打开 index.js ,找到 initChart 函数里的 option 变量,它是我们初始化图表的核心,也是我们的配置项。只要图表的样式和数据更改都与他有关系。

找到 option.series.label 将他修改为如下代码所示。

var option = {
	backgroundColor: "#ffffff",
	series: [{
		// 文字标签
  	label: {
			show: false
		},
		//....其他配置项
  }]
}

保存编译,查看效果,文字标签就消失啦!(为了减少篇幅,接下来我不再展示文档,直接上代码)

在这里插入图片描述

添加数据项并修改颜色 data

我们还看到,设计图上是十二个色块,而我们的数量明显不够。下面开始添加数据项,并修改颜色。

文档:https://echarts.apache.org/zh/option.html#series-bar.data

找到 option.series.data 修改里面的内容,下面我以代码给出示例:

var option = {
	backgroundColor: "#ffffff",
	series: [{
		// 数据项
  	data: [
			{
				value: 1,
				name: '红色',
				itemStyle: {
					color: 'red'
				}
			},
			{
				value: 1,
				name: '绿色',
				itemStyle: {
					color: 'green'
				}
			},
			// ....更多数据
		],
		//....其他配置项
  }]
}

有同学会问,诶那个彩色图怎么办?那的确是个难点,我们放到后面去解决,先随便给点颜色放着。这样我们就得到一个这样的图表,如下图所示
在这里插入图片描述

添加边距 itemStyle

最后还有一点不一样,就是边距问题。通过上面的经历,我们已经对文档有一点点熟悉了,我们已经知道,所有配置都可以从文档里找到答案。这次也是如此,我直接上答案

地址:https://echarts.apache.org/zh/option.html#series-pie.itemStyle

var option = {
	backgroundColor: "#ffffff",
	series: [{
		// 样式
  	itemStyle: {
  		// 边框宽度
			borderWidth: 10,
			// 边框颜色,为了凸显效果,先用纯黑 #000
			borderColor: "#000"
		},
		//....其他配置项
  }]
}

代码生效后,得到如图所示:
在这里插入图片描述

更改背景颜色

更改背景颜色需要注意,可不是更改 option.series.itemStyle ,我在这里踩了好久的坑,最后才看到,原来是修改 option.backgroundColor

地址:https://echarts.apache.org/zh/option.html#backgroundColor

var option = {
	backgroundColor: "#00224f",
}

这样就能看到生效啦!生效后我们来参照效果图,依照刚学的 添加边框 把图表边框做成白色,边框宽度改成3, 即可得到下图所示:

在这里插入图片描述

往图表中添加图片(仅支持H5

设计图中,我们的正中间是一个开关,一般会有UI给我们切图,但现在是教学篇,我们直接去 iconfont 里找一个就好了~
iconfont地址: https://www.iconfont.cn/search/index?searchType=icon&q=%E5%BC%80%E5%85%B3&page=2&tag=fill

本来是想用 option.graphic 放入图片的,但经过尝试,微信小程序版本的 echarts 不支持 Image Contruct
地址:https://echarts.apache.org/zh/option.html#graphic

在这里插入图片描述
好的,换方案。想要在我们的图表中放入个性化图片只能用绝对定位了,简单的CSS这里不再演示了~

进阶使用echarts

在完成以上基础使用后,我们已经学会从文档里找到自己需要的配置项进行个性化样式修改了。但文档中仍有许多内容我们未曾涉猎使用过,比如本次需求中看着很恶心的 彩色渐变色块,如何用 echarts 实现,而不用图片贴上去的 lowlow 方法~ 现在开始吧

渐变色块

现在再来看一下这个渐变色,越看越恶心有木有。不过别担心,前端有妙招。
在这里插入图片描述
要修改各个色块的颜色,应当是 options.series.data.itemStyle.color
地址:https://echarts.apache.org/zh/option.html#series-pie.data.itemStyle.color

在这里插入图片描述
从文档发现,我们可以用 #fff 的方式设置纯色,也可以设置渐变色等等,但需要看 option.color。好的,跳转进去看看

在这里插入图片描述
只有代码,没有示范,好吧,那我们就自己示范。把红色框柱的代码复制出来,放到对应色块的color里,效果和代码如下图所示
在这里插入图片描述好的,渐变确实是可行的,但是问题来了,这个色块本来应该是从左到右,从红到白到蓝,如下图所示
在这里插入图片描述

好,那我们再来研究下,怎么让渐变色横向渐变?看来看去只有这四个坐标了,即 x,y,x2,y2
在这里插入图片描述
这个地方我自己也没有理解透彻,我的理解来说,x是左上,x2是右上;y是左下,y2是右下。也就是这样的

在这里插入图片描述

那经过我多次调试,这个红白蓝的渐变已经完成了,代码如下:

var option = {
	backgroundColor: "#ffffff",
	series: [{
		// 样式
  	data: [
  	//....数据项
  		{
  			value: 1,
  			name: "彩色",
  			itemStyle: {
  				color:{
  					type: 'linear',
             x: 0,
             y: 0,
             // 上边短:即 x 到 x2 的距离很短,因此 x2 要小很多,多次调试后0.2为合适
             x2: 0.2,
             // 下边长,所以 y2 要长很多,多次调试后1为合适
             y2: 1,
             colorStops: [
                 {
                     offset: 0,
                     color: 'red' // 0% 处的颜色
                 },
                 {
                     offset: 0.5,
                     color: 'white' // 0% 处的颜色
                 },
                 {
                     offset: 1,
                     color: 'blue' // 0% 处的颜色
                 }
             ],
             global: false // 缺省为 false
  				}
  			}
  		}
  	]
		//....其他配置项
  }]
}

还有一个色块也是如此完成,(剩下两个色块搞不定,太丰富的渐变了…)效果图如下
在这里插入图片描述

事件触发

事件触发无疑是最重要的一环,如果无法事件触发,捕捉用户点击的DOM元素,也就无法作出对应的逻辑反应了。事件触发在官方中也有明确的介绍,地址:https://echarts.apache.org/handbook/zh/concepts/event

它的使用也是很简单的,代码如图所示:

function initChart(canvas, width, height, dpr) {
	const chart = echarts.init(canvas, null, {
      width: width,
      height: height,
      devicePixelRatio: dpr // new
  });
  canvas.setChart(chart);
	var option = '....太长了忽略'
	chart.setOption(option);
	
	// 这里可以看到打印的所有内容
  chart.on('click', (e) => {
      console.log(e);
  })
  // 使用 ES6 解构语法,直接将所需要的字段拿到
  chart.on('mousemove', ({ data: { name } }) => {
      console.log(name);
  })

	return chart
}

这样就成功事件触发了,如下图所示
在这里插入图片描述

图表更新

最后,我们来实验一下:点击任一色块,该色块颜色变成可爱的粉色~

要完成这一功能,我们需要结合刚才提到的事件触发图表更新,首先从上文中,我们顺利绑定了事件,我们成功知道用户在任一时刻点击或滑动的色块。

现在,我们要更新图表,核心在 chart.setOption(option),跟着我代码一步一步来:

首先把 chartoption 两个变量提升为全局变量

var chart, option;

function initChart(canvas, width, height, dpr) {
	// ......
}

函数内使用这两个全局变量

var chart, option;

function initChart(canvas, width, height, dpr) {
	chart = echarts.init(canvas, null, {
       width: width,
       height: height,
       devicePixelRatio: dpr // new
   });
   option = '...太长了忽略'
}

然后在事件监听里操作,代码如下:

chart.on('click', ({ data: { name } }) => {
    const data = option.series[0].data;
    data.forEach(item => {
        if(item.name == name) {
            item.itemStyle.color = "pink";
            chart.setOption(option)
        }
    })
})

这样就成功啦!点击任一色块,该色块变成粉红色
在这里插入图片描述

完结撒花

断断续续写了一个星期,其实 echarts 还有很多有趣的内容没有提到,比如像深圳地铁一样,点击节点弹出提示框——tooltip 功能;多维坐标系——series 多维;很多我们见到的有趣的功能,本教程都没有讲到。但讲下去的话篇幅就太长了,我的本意是新手入门教程,而不是数据可视化从入门到入土

关于 echarts 的使用还有什么想看的,或者有趣的功能想看怎么实现,欢迎在评论区告诉我~

最后,本教程为个人工程实践所得,非最佳实践,如有错误或有不足的地方,请务必提出指正谢谢!

本项目已建仓库,可以在 https://github.com/Minf97/echarts-use 下载源码,欢迎star~

完结撒花-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

word单独一页设置页面设置

点击“分隔符——下一页”&#xff0c;这一页就成为了独立的一节&#xff0c;就可以单独设置页面布局了

掌握Python列表的魔法:解密常用方法揭示的编程奥秘!

在Python的编程世界中&#xff0c;列表是你的魔法仓库&#xff0c;能够存储、组织和操控各种数据。这些数据可以是数字、字符串、对象&#xff0c;甚至是其他列表。无论你是新手还是经验丰富的开发者&#xff0c;本篇博客将带你深入探索Python列表的常用方法&#xff0c;揭示这…

python简单知识点大全

python简单知识点大全 一、变量二、字符串三、比较运算符四、随机数4.1、随机整数4.2、随机浮点数4.3、随机数重现 五、数字类型5.1、整数5.2、浮点数5.3、复数 六、数字运算七、内置函数八、布尔类型八、逻辑运算符九、短路逻辑和运算符优先级十、分支和循环10.1、if语句10.2、…

Java技术整理(3)—— 多线程并发篇

1、Java 线程实现/创建方式 &#xff08;1&#xff09;继承Thread类 Thread类本质上是实现了Runnable接口的实例&#xff0c;代表一个线程的实例&#xff0c;通过start()启动&#xff0c;自动执行run()方法。 &#xff08;2&#xff09;实现Runnable接口 Runnable是一个没有…

【我们一起60天准备考研算法面试(大全)-第三十七天 37/60】【思维题】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

论文阅读---《Unsupervised Transformer-Based Anomaly Detection in ECG Signals》

题目&#xff1a;基于Transformer的无监督心电图&#xff08;ECG&#xff09;信号异常检测 摘要 异常检测是数据处理中的一个基本问题&#xff0c;它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易&#xff0c;然而&#xff…

实时通信应用的开发:Vue.js、Spring Boot 和 WebSocket 整合实践

目录 1. 什么是webSocket 2. webSocket可以用来做什么? 3. webSocket协议 4. 服务器端 5. 客户端 6. 测试通讯 1. 什么是webSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务…

如何在洛谷自己出的题中出数据

首先&#xff0c;假如你要加1个数据&#xff1a; 打开Dev-c&#xff08;其他也行&#xff09; 填入输入数据&#xff1a; &#xff08;这个数据只是我编的&#xff09; 将这个东东保存为in文件&#xff08;第一个数据就名为001&#xff0c;第二个002&#xff09;&#xff1a…

Centos 从0搭建grafana和Prometheus 服务以及问题解决

下载 虚拟机下载 https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/17_0 cenos 镜像下载 https://www.centos.org/download/ grafana 服务下载 https://grafana.com/grafana/download/7.4.0?platformlinux …

北美跨境购物商城多语言多货币系统快捷搭建(java开源)

我了解到您想搭建一个北美跨境购物商城&#xff0c;拥有多语言和多货币系统&#xff0c;并且希望使用Java开源技术进行快速搭建。以下是一个基本的搭建步骤&#xff1a; 1.确定需求&#xff1a;首先确定您的商城需求&#xff0c;包括功能、设计和用户体验等方面。确保您清楚地…

扫描文件怎么扫描成pdf格式?两招教你全搞定

纸质版文件在办公中有时不便携带和保存&#xff0c;最佳解决方法当然是将其拍照扫描并保存为PDF格式。PDF文件在日常生活中非常实用&#xff0c;许多文件都需要转换为PDF格式才能使用。今天将分享给大家如何将扫描文件输出为PDF格式&#xff0c;耐心阅读这篇文章&#xff0c;相…

【MFC】08.MFC消息,自定义消息,常用控件(MFC菜单创建大总结),工具栏,状态栏-笔记

本专栏上几篇文章讲解了MFC几大机制&#xff0c;今天带领大家学习MFC自定义消息以及常用控件&#xff0c;最常用的控件请查看本专栏第一二篇文章&#xff0c;今天这篇文章介绍工具栏&#xff0c;菜单和状态栏&#xff0c;以及菜单创建大总结。 文章目录 MFC消息分类&#xff1…

Linux网络协议和管理

Linux网络协议和管理 一.网络设备基本知识 图1-网络设备基本知识 二.TCP/IP协议栈简介 1.概述 网络协议通常工作在不同的层中&#xff0c;每一层分别负责不同的通信功能。一个协议族&#xff0c; 比如T C P / I P&#xff0c;是一组不同层次上的多个协议的组合。T C P / I P通…

JVM之内存模型

1. Java内存模型 很多人将Java 内存结构与java 内存模型傻傻分不清&#xff0c;java 内存模型是 Java Memory Model&#xff08;JMM&#xff09;的意思。 简单的说&#xff0c;JMM 定义了一套在多线程读写共享数据时&#xff08;成员变量、数组&#xff09;时&#xff0c;对数据…

鉴源论坛·观通丨轨交软件测试技术

作者 | 刘艳青 上海控安安全测评部测试经理 版块 | 鉴源论坛 观通 引语&#xff1a;第一篇对轨交信号系统从铁路系统分类和组成、城市轨交系统分类和组成、城市轨交系统功能、城市轨交系统发展方面做了介绍&#xff1b;第二篇从信号基础的讲述了信号机、转辙机、轨道电路等设…

7.1 动手实现AlexNet

AlexNet引入了dropput层 代码 import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(# 样本数为1,通道数为96,11x11的卷积核,步幅为4&#xff0c;减少输出的高度和深度。 LeNet的通道数才6&#xff0c;此处96&#xff0c;为什么要增加这么多通…

常用开源的弱口令检查审计工具

常用开源的弱口令检查审计工具 1、SNETCracker 1.1、超级弱口令检查工具 SNETCracker超级弱口令检查工具是一款开源的Windows平台的弱口令安全审计工具&#xff0c;支持批量多线程检查&#xff0c;可快速发现弱密码、弱口令账号&#xff0c;密码支持和用户名结合进行检查&am…

C#与C++交互(2)——ANSI、UTF8、Unicode文本编码

【前言】 我们知道计算机上只会存储二进制的数据&#xff0c;无论文本、图片、音频、视频等&#xff0c;当我们将其保存在计算机上时&#xff0c;都会被转成二进制的。我们打开查看的时候&#xff0c;二进制数据又被转成我们看得懂的信息。如何将计算机上的二进制数据转为我们…

Android 实现 RecyclerView下拉刷新,SwipeRefreshLayout上拉加载

上拉、下拉的效果图如下&#xff1a; 使用步骤 1、在清单文件中添加依赖 implementation ‘com.android.support:recyclerview-v7:27.1.1’ implementation “androidx.swiperefreshlayout:swiperefreshlayout:1.0.0” 2、main布局 <LinearLayout xmlns:android"http…

洛阳Geotrust旗下有RapidSSL https证书吗

Geotrust是知名的CA认证机构&#xff0c;旗下的https数字证书产品众多&#xff0c;Geotrust的数字证书具有高度的兼容性和可信度&#xff0c;得到了全球用户的广泛认可和信赖。Geotrust是一家全球领先的数字证书颁发机构&#xff0c;提供多种数字证书服务&#xff0c;包括SSL证…