echarts数据化图表入门级教程(附10个案例)


01-Echarts-介绍

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

简单来说

  • 作用:展示图表的(大数据可视化)
  • 百度,捐给Apache 免费开源
  • 竞品
    • heightCharts
    • D3

Apache ECharts,一个基于 JavaScript 的开源可视化图表库
官网地址

02-使用

  • 步骤1:下载并引入echarts.js文件

在这里插入图片描述

  • 步骤2:准备一个具备大小的DOM容器

在这里插入图片描述

  • 步骤3:初始化echarts实例对象

在这里插入图片描述

  • 步骤4:指定配置项和数据(option)

在这里插入图片描述

  • 步骤5:将配置项设置给echarts实例对象

在这里插入图片描述

03-Echarts-基础配置

在这里插入图片描述

需要了解的主要配置:series xAxis yAxis grid tooltip title legend color

  • series

    • 系列列表。每个系列通过 type 决定自己的图表类型
    • 大白话:图标数据,指定什么类型的图标,可以多个图表重叠。
  • xAxis:直角坐标系 grid 中的 x 轴

    • boundaryGap: 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
  • yAxis:直角坐标系 grid 中的 y 轴

  • grid:直角坐标系内绘图网格。

  • title:标题组件

  • tooltip:提示框组件

  • legend:图例组件

  • color:调色盘颜色列表

    数据堆叠,同个类目轴上系列配置相同的stack值后 后一个系列的值会在前一个系列的值上相加。

04-ECharts官网使用

  • 记住网址所在 https://echarts.apache.org/zh/index.html
  • 入门示例(helloword)https://echarts.apache.org/handbook/zh/get-started/
  • 类的方法

在这里插入图片描述

  • 实例的方法

在这里插入图片描述

  • 动作与事件

在这里插入图片描述

  • 选项配置option如何修改

在这里插入图片描述
在这里插入图片描述

05-简单案例

demo1

运用知识点
里面涉及的单词document文档
Option选项data数据
type类型bar条(柱状条)
chart图表set设置
series系列(数据)Axis轴线
xAxis水平轴线legend传奇(图例)
tooltip 提示init初始化
实现效果

在这里插入图片描述

代码
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 01 导入js -->
		<script src="js/echarts.min.js"></script>
		<!-- 03 设置容器的样式 -->
		<style>
			#container{
				width: 800px;
				height: 600px;
			}
		</style>
	</head>
	<body>
		<!-- 02 创建个容器 -->
		<div id="container"></div>
	</body>
	<script>
		//04 实例化echarts
		// 4.1 创建一个实例
		var echart = echarts.init(document.getElementById("container"))
		// 4.2 定义配置项
		var option = {
			// 图表的标题
			title:{
				text:"我的第一个图表"
			},
			// 图表的提示
			tooltip:{},
			// 图例
			legend:{data:["睡眠时长"]},
			// x轴线
			xAxis:{data:["周一","周二","周三","周四","周五","周六","周日"]},
			// y轴线
			yAxis:{},
			// 设置数据
			series:[
				{
					// 数据名称
					name:"睡眠时长",
					// 类型为柱状图
					type:"bar",
					// 数据data
					data:[8,10,4,5,9,4,8]
					}
			]
		}
		// 4.3 更新配置
		echart.setOption(option);
		
	</script>

demo2

实现效果

在这里插入图片描述

代码
<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 01 导入js -->
		<script src="js/echarts.min.js"></script>
		<!-- 03 设置容器的样式 -->
		<style>
			#container{
				width: 800px;
				height: 600px;
			}
		</style>
	</head>
	<body>
		<!-- 02 创建个容器 -->
		<div id="container"></div>
	</body>
	<script>
		//04 实例化echarts
		// 4.1 创建一个实例
		var echart = echarts.init(document.getElementById("container"))
		// 4.2 定义配置项
		var option = {
			// 图表的标题
			title:{
				text:"我的第一个图表"
			},
			// 图表的提示
			tooltip:{},
			// 图例
			legend:{data:["睡眠时长","玩游戏时长","上课时长"]},
			// x轴线
			xAxis:{data:["周一","周二","周三","周四","周五","周六","周日"]},
			// y轴线
			yAxis:{},
			// 设置数据
			series:[
				{
					// 数据名称
					name:"睡眠时长",
					// 类型为柱状图
					type:"bar",
					// 数据data
					data:[8,10,4,5,9,4,8]
				},
				{
					// 数据名称
					name:"玩游戏时长",
					// 类型为柱状图
					type:"line",
					// 数据data
					data:[2,4,1,5,6,8,5]
				},
				{
					// 数据名称
					name:"上课时长",
					// 类型为柱状图
					type:"line",
					smooth:true,
					// 数据data
					data:[6,7,5,8,6,1,0],
					areaStyle:"#f70"
				},
				{
					name:"成绩",
					// 饼形图
					type:"pie",
					// radius:80,
					// 半径
					radius:[80,50],
					// 位移
					left:-80,
					top:-270,
					// 数据
					data:[
						{name:"js",value:90},
						{name:"html",value:85},
						{name:"jq",value:90},
						{name:"vue",value:50},
					]
				}
			]
		}
		//  更新配置
		echart.setOption(option);
	</script>

demo3

实现效果

在这里插入图片描述

代码
  • 官网——主题构建工具 下载js的就行,然后引入

在这里插入图片描述
在这里插入图片描述

<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 01 导入js -->
		<script src="js/echarts.min.js"></script>
		<!-- 03 设置容器的样式 -->
		<script src="./js/purple-passion.js" type="text/javascript" charset="utf-8"></script>
		<style>
			#container{
				width: 800px;
				height: 600px;
			}
		</style>
	</head>
	<script>
		//04 实例化echarts
		// 4.1 创建一个实例
		var echart = echarts.init(document.getElementById("container"))
		// 主题,light,dark,自定义
		// var echart = echarts.init(document.getElementById("container"),'purple-passion')
		// 4.2 定义配置项
		var option = {
			// 调色盘
			// color:["#55aaff","#aaff7f","#55007f","#ffff00"],
			// 图表的标题
			title:{
				text:"我的第一个图表"
			},
			// 图表的提示
			tooltip:{},
			// 图例
			legend:{data:["睡眠时长","玩游戏时长","上课时长"]},
			// x轴线
			xAxis:{data:["周一","周二","周三","周四","周五","周六","周日"]},
			// y轴线
			yAxis:{},
			// 设置数据
			series:[
				{
					// 数据名称
					name:"睡眠时长",
					// 类型为柱状图
					type:"bar",
					// 数据data
					data:[8,10,4,5,9,4,8],
					color:["#ac4cff"]
				},
				{
					// 数据名称
					name:"玩游戏时长",
					// 类型为柱状图
					type:"line",
					// 数据data
					data:[2,4,1,5,6,8,5]
				},
				{
					// 数据名称
					name:"上课时长",
					// 类型为柱状图
					type:"line",
					smooth:true,
					// 数据data
					data:[6,7,5,8,6,1,0],
					
				},
				{
					name:"成绩",
					// 饼形图
					type:"pie",
					// radius:80,
					// 半径
					radius:[80,50],
					// 位移
					left:-80,
					top:-270,
					// 数据
					data:[
						{name:"js",value:90},
						{name:"html",value:85,itemStyle:{
							color:"#ffaa00"
						}},
						{name:"jq",value:90,
						 itemStyle:{
							 normal:{color:"#93da6c"},
							 emphasis:{color:"#bcff57"}
						 }
						},
						{name:"vue",value:50},
					]
				}
			]
		}
		//  更新配置
		echart.setOption(option);
	</script>

demo4

实现效果

在这里插入图片描述

代码
<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 01 导入js -->
		<script src="js/echarts.min.js"></script>
		<!-- 03 设置容器的样式 -->
		<script src="./js/purple-passion.js" type="text/javascript" charset="utf-8"></script>
		<style>
			#container{
				width: 800px;
				height: 600px;
			}
		</style>
	</head>
	<body>
		<!-- 02 创建个容器 -->
		<div id="container"></div>
	</body>
<script>
	// 定义渐变
	var linear = {
	  type: 'linear',
	  x: 0,
	  y: 0,
	  x2: 0,
	  y2:1,
	  colorStops: [{
		  offset: 0, color: '#02bcff' // 0% 处的颜色
	  }, {
		  offset: 1, color: '#5555ff' // 100% 处的颜色
	  }],
	  global: false // 缺省为 false
	}
		//04 实例化echarts
		// 4.1 创建一个实例
		var echart = echarts.init(document.getElementById("container"))
		// 主题,light,dark,自定义
		// var echart = echarts.init(document.getElementById("container"),'purple-passion')
		// 4.2 定义配置项
		var option = {
			// 调色盘
			// color:["#55aaff","#aaff7f","#55007f","#ffff00"],
			// 图表的标题
			title:{
				text:"我的第一个图表"
			},
			// 图表的提示
			tooltip:{},
			// 图例
			legend:{data:["睡眠时长","玩游戏时长","上课时长"]},
			// x轴线
			xAxis:{data:["周一","周二","周三","周四","周五","周六","周日"]},
			// y轴线
			yAxis:{},
			// 设置数据
			series:[
				{
					// 数据名称
					name:"睡眠时长",
					// 类型为柱状图
					type:"bar",
					// 数据data
					data:[8,10,4,5,9,4,8],
					// color:["#ac4cff"]
					itemStyle:{
						color:linear,
						borderRadius:[30,30,0,0]
					}
				},
				{
					// 数据名称
					name:"玩游戏时长",
					// 类型为柱状图
					type:"line",
					// 数据data
					data:[2,4,1,5,6,8,5]
				},
				{
					// 数据名称
					name:"上课时长",
					// 类型为柱状图
					type:"line",
					smooth:true,
					// 数据data
					data:[6,7,5,8,6,1,0],
					// areaStyle:"#f70"
					
				},
				{
					name:"成绩",
					// 饼形图
					type:"pie",
					// radius:80,
					// 半径
					radius:[80,50],
					// 位移
					left:-80,
					top:-270,
					// 数据
					data:[
						{name:"js",value:90},
						{name:"html",value:85,itemStyle:{
							color:"#ffaa00"
						}},
						{name:"jq",value:90,
						 itemStyle:{
							 normal:{color:"#93da6c"},
							 emphasis:{color:"#bcff57"}
						 }
						},
						{name:"vue",value:50},
					]
				}
			]
		}
		// 4.3 更新配置
		echart.setOption(option);
	</script>

demo5

实现效果

在这里插入图片描述

代码
html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/echarts.min.js"></script>
		<style> 
		 #container{
			 width: 800px;
			 height: 600px;
		 }
		</style>
	</head>
	<body>
		<div id="container"></div>
<script>
			var echart = echarts.init(document.getElementById("container"))
			var option = {
				title:{text:"堆叠-蓝蓝-红红"},
				legend:{data:["蓝蓝","红红"]},
				// tooltip提示  trigger触发器 axis轴线触发,item 当前项触发
				tooltip:{trigger:"axis"},
				yAxis:{data:["vue","js","html"]},
				xAxis:{},
				series:[
					{name:"蓝蓝",type:"bar",data:[80,60,75],stack:true,
					// stack堆叠,label 标签,position位置,inside内部,right右侧,formmater格式
					// \n 代表换行,{a}系列名 "蓝蓝" {b}数值名 "vue"  {c}数值  80
					label:{show:true,position:"insideRight",formatter:"{a}\n{c}分"}},
					{name:"红红",type:"bar",data:[95,80,35],stack:true,
					label:{show:true,position:"insideRight",formatter:"{a}\n{c}分"}}
				]
			}
			echart.setOption(option);
		</script>

demo6

实现效果

在这里插入图片描述

代码
  <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/echarts.min.js"></script>
        <style>
            #container {
                width: 800px;
                height: 600px;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <script>
            var echart = echarts.init(document.getElementById("container"));
            var option = {
                title: { text: "堆叠-蓝蓝-红红" },
                toolbox: {
                    // 显示工具箱
                    show: true,
                    feature: {
                        // 数据缩放
                        dataZoom: {
                            yAxisIndex: "none",
                        },
                        // 数据视图只读
                        dataView: { readOnly: false },
                        // 魔法类型
                        magicType: { type: ["line", "bar"] },
                        //  重置
                        restore: {},
                        // 保存图片
                        saveAsImage: {},
                    },
                },
                legend: { data: ["蓝蓝", "红红"] },
                // tooltip提示  trigger触发器 axis轴线触发,item 当前项触发
                tooltip: { trigger: "axis" },
                yAxis: { data: ["vue", "js", "html"] },
                xAxis: {},
                series: [
                    {
                        name: "蓝蓝",
                        type: "bar",
                        data: [80, 60, 75],
                        stack: true,
                        // stack堆叠,label 标签,position位置,inside内部,right右侧,formmater格式
                        // \n 代表换行,{a}系列名 "蓝蓝" {b}数值名 "vue"  {c}数值  80
                        label: {
                            show: true,
                            position: "insideRight",
                            formatter: "{a}\n{c}分",
                        },
                    },
                    {
                        name: "红红",
                        type: "bar",
                        data: [95, 80, 35],
                        stack: true,
                        label: {
                            show: true,
                            position: "insideRight",
                            formatter: "{a}\n{c}分",
                        },
                    },
                ],
            };
            echart.setOption(option);
        </script>

demo7

实现效果

在这里插入图片描述

代码
<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/echarts.min.js"></script>
		<style> 
		 #container{
			 width: 800px;
			 height: 600px;
		 }
		</style>
	</head>
	<body>
		<div id="container"></div>
	<script>
			var echart = echarts.init(document.getElementById("container"))
			var option = {
				title:{text:"网站访问来源"},
				legend:{data:["其他","百度"]},
				tooltip:{},
				series:[
					{type:"pie",radius:[200,110],data:[
						{name:"百度",value:1200,label:{
							show:true,
							position:"center",
							// {d}百分比 {big|内容} 使用样式
							formatter:"{big|{d}}{small|%}\n{b}",
							// 定义样式(富文本)
							rich:{
								big:{
									color:"#f70",
									fontSize:"48px",
									fontWeight:900,
								},
								small:{
									color:"#f70"
								}
							}
						}},
						{name:"其他",value:360,
						// 样式灰色
						itemStyle:{color:"#ccc"},
						// 标签不显示
						label:{show:false},
						// 提示不显示
						tooltip:{show:false}}
					]}
				]
				 
			}
			echart.setOption(option);
		</script>

demo8

实现效果

在这里插入图片描述

代码
<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/echarts.min.js"></script>
		<style> 
		 #container{
			 width: 1200px;
			 height: 600px;
		 }
		</style>
	</head>
	<body>
		<div id="container"></div>
<script type="text/javascript" src="./js/data.js">			
		</script>
		<script>
			console.log(data);
			// sort排序,map映射,slice(-4)切割后四位
			var  trends = data.data.trends.sort((a,b)=>a.day-b.day);
			var echart = echarts.init(document.getElementById("container"))
			var option = {
				title:{text:"新冠肺炎趋势"},
				legend:{data:["累计确诊"]},
				tooltip:{},
				yAxis:{},
				// slice(0,20),只显示前20条数据
				xAxis:{data:trends.slice(0,20).map(item=>String(item.day).slice(-4))},
				series:[{
					name:"累计确诊",
					type:"bar",
					// data:[{name:"",value:""}]
					data:trends.slice(0,20).map(item=>item.sure_cnt)
				}]				 
			}
			// 每隔3秒执行一次move
			var id = setInterval(move,3000);
			
			function move(){
				// 删除第一个
				var first = trends.shift();
				// 添加到最后
				trends.push(first);
				// 更新option
				option.xAxis.data = trends.slice(0,20).map(item=>String(item.day).slice(-4));
				option.series[0].data= trends.slice(0,20).map(item=>item.sure_cnt);
				// 更新 图
				echart.setOption(option);
			}
			// 鼠标移入停止动画
			echart.on("mouseover",function(){clearInterval(id)})
			// 鼠标移出播放
			echart.on("mouseout",function(){
				id = setInterval(move,3000);
			})
			
			echart.setOption(option);
		</script>

demo9

实现效果

在这里插入图片描述

代码
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/echarts.min.js"></script>
		<style> 
		 #container{
			 width: 1200px;
			 height: 600px;
		 }
		</style>
	</head>
	<body>
		<div id="container"></div>
		<script type="text/javascript" src="./js/data.js">
	</body>	
<script>
			console.log(data);
			// sort排序,map映射,slice(-4)切割后四位
			var  trends = data.data.trends.sort((a,b)=>a.day-b.day);
			var echart = echarts.init(document.getElementById("container"))
			var option = {
				title:{text:"新冠肺炎趋势"},
				legend:{data:["累计确诊"]},
				tooltip:{},
				yAxis:{},
				// slice(0,20),只显示前20条数据
				xAxis:{data:trends.slice(0,20).map(item=>String(item.day).slice(-4))},
				series:[{
					name:"累计确诊",
					type:"bar",
					// data:[{name:"",value:""}]
					data:trends.slice(0,20).map(item=>item.sure_cnt)
				}],
				// 每个执行延迟的时候(idx就是下标,随着下标的增大延迟会长)
				animationDelay: function (idx) {
				     // 越往后的数据延迟越大
				     return idx * 200;
				},
				animationDuration:function(idx){
					// 每小格动画的时候
					return idx*200;
				},
				// 弹性的方式出现动画
				animationEasing:"bounceInOut"
			}
			// 每隔3秒执行一次move
			// var id = setInterval(move,3000);
			
			function move(){
				// 删除第一个
				var first = trends.shift();
				// 添加到最后
				trends.push(first);
				// 更新option
				option.xAxis.data = trends.slice(0,20).map(item=>String(item.day).slice(-4));
				option.series[0].data= trends.slice(0,20).map(item=>item.sure_cnt);
				// 更新 图
				echart.setOption(option);
			}
			// 鼠标移入停止动画
			echart.on("mouseover",function(){clearInterval(id)})
			// 鼠标移出播放
			echart.on("mouseout",function(){
				id = setInterval(move,3000);
			})
			
			echart.setOption(option);
		</script>

demo10

实现效果

在这里插入图片描述

代码
  <script src="js/echarts.min.js"></script>
        <style>
            #container {
                width: 1200px;
                height: 600px;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <script type="text/javascript" src="./js/data.js">		</script>
</body>
<script>
            console.log(data);
            // sort排序,map映射,slice(-4)切割后四位
            var trends = data.data.trends.sort((a, b) => a.day - b.day);
            var echart = echarts.init(
                document.getElementById("container"),
                "dark"
            );
            var option = {
                title: { text: "新冠肺炎趋势" },
                legend: { data: ["累计确诊"] },
                tooltip: {},
                yAxis: {},
                // slice(0,20),只显示前20条数据
                xAxis: {
                    data: trends
                        .slice(0, 20)
                        .map((item) => String(item.day).slice(-4)),
                },
                series: [
                    {
                        name: "累计确诊",
                        type: "bar",
                        // data:[{name:"",value:""}]
                        data: trends.slice(0, 20).map((item) => item.sure_cnt),
                    },
                ],
                // 每个执行延迟的时候(idx就是下标,随着下标的增大延迟会长)
                animationDelay: function (idx) {
                    // 越往后的数据延迟越大
                    return idx * 100;
                },
                animationDuration: function (idx) {
                    // 每小格动画的时候
                    return idx * 100;
                },
                // 弹性的方式出现动画
                animationEasing: "bounceInOut",
            };
            // 每隔3秒移动一个
            // 显示提示的下标
            var ind = 0;
            var id = setInterval(play, 3000);
            // 播放
            function play() {
                // 发送一个显示提示的动作
                echart.dispatchAction({
                    type: "showTip",
                    // 系列的 index,在 tooltip 的 trigger 为 axis 的时候可选。
                    seriesIndex: 0,
                    // 数据项的 index,如果不指定也可以通过 name 属性根据名称指定数据项
                    dataIndex: ind,
                    // 可选,数据项名称,在有 dataIndex 的时候忽略

                    position: "top",
                });
                // 让ind加1
                ind++;
                // 大于20就归0
                if (ind >= 20) {
                    ind = 0;
                }
            }

            echart.setOption(option);
        </script>

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐