大数据可视化技术
第一章、ECharts概念与体验
1.1 ECharts简介
ECharts商业级数据图表,最初由百度团队开源。它一个纯 JavaScript
的图表库,能够在PC端和移动设备上流畅运行,兼容当前绝大部分浏览器
IE,Chrome,Firefox,Safari等),底层依赖轻量级的Canvas , ECharts
提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。
1.2 ECharts发展历程
- 2018年初,捐赠给Apache基金会,成为ASF孵化级项目。
- 2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业,成为Apache顶级项目。
- 2021年1月28日,ECharts 5线上发布会举行。
1.3 ECharts 特性
1.4 什么是数据可视化与应用场景
- 数据可视化主要目的:借助于图形化手段,清晰有效的传达与沟通信
- 数据可视化主要作用︰数据可视化可以把数据从冰冷的数字转换成图形,解释蕴含在数据中的规律和道理。
1.5 数据可视化的应用场景
通用报表
移动端图表
大屏可视化
图编辑与图分析
地理可视化
1.6 ECharts 数据可视化体验
1.6.1 推荐开发软件
- 蓝桥云课实训仿真平台vsCode
- lDEA专业版
- PyCharm专业版
- WebStorm专业版
- HBuilder
第二章、ECharts基础入门
2.0 ECharts安装
在 https://www.jsdelivr.com/package/npm/echarts 选择 dist/echarts.js
,点击并保存为 echarts.js
文件。
2.1.1 引入 Apache ECharts
在刚才保存 echarts.js
的目录新建一个 demo01.html
文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!-- 引入刚刚下载的 ECharts 文件 -->
<script src="js/echarts.js"></script>
</head>
</html>
打开这个 demo.html
,你会看到一片空白。但是不要担心,打开控制台确认没有报错信息,就可以进行下一步。
2.1.2 绘制一个简单的图表
在绘图前我们需要为 ECharts 准备一个定义了高宽的 DOM 容器。在刚才的例子 </head>
之后,添加:
<body>
<!-- 为 ECharts 准备一个定义了宽高的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
</body>
然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图,下面是完整代码。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>ECharts</title>
<!-- 引入刚刚下载的 ECharts 文件 -->
<script src="js/echarts.js"></script>
</head>
<body>
<!-- 为 ECharts 准备一个定义了宽高的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data: ['销量']
},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</body>
</html>
这样你的第一个图表就诞生了!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="js/echarts.js"></script>
<title>ECharts体验</title>
</head>
<body>
<!-- 定义DIV,用于放置ECharts绘制的图表。注意:DIV一定要设置高度和宽度 -->
<div id="main" style="width: 600px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '猴子电商平台销售数据',
subtext: '2024年3月份'
},
tooltip: {},
xAxis : {
data: ['猕猴', '懒猴', '蜘蛛猴', '红面猴', '狒狒' , '金丝猴', '眼镜猴', '疣猴', '长臂猿']
},
yAxis: {},
series: [
{
type: 'bar',
data: [1000, 530, 920, 1468, 82, 377, 860, 1200, 100]
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
2.1.3 ECharts体验
demo01.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="js/echarts.js"></script>
<title>ECharts体验</title>
</head>
<body>
<!-- 定义DIV,用于放置ECharts绘制的图表。注意:DIV一定要设置高度和宽度 -->
<div id="main" style="width: 600px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '猴子电商平台销售数据',
subtext: '2024年3月份'
},
tooltip: {},
xAxis : {
data: ['猕猴', '懒猴', '蜘蛛猴', '红面猴', '狒狒' , '金丝猴', '眼镜猴', '疣猴', '长臂猿']
},
yAxis: {},
series: [
{
type: 'bar',
data: [1000, 530, 920, 1468, 82, 377, 860, 1200, 100]
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
demo02.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="js/echarts.js"></script>
<title>ECharts体验</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 1200px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: 'xx购物网',
subtext: '2024年度'
},
tooltip: {},
// 添加图列
legend: {
data: ['电脑', '手机', '家电']
},
xAxis : {
data: ['一月', '二月', '三月', '四月', '五月' , '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
},
yAxis: {},
series: [
{
// 图表类型
type: 'bar',
// 实际数据
data: [1000, 530, 920, 1468, 82, 377, 860, 1200, 100, 830, 1350, 980],
name: '电脑'
},
{
type: 'bar',
data: [100, 630, 920, 1368, 42, 37, 460, 1300, 400, 630, 1250, 780],
name: '手机'
},
{
type: 'bar',
data: [200, 230, 420, 1268, 502, 277, 160, 1400, 300, 430, 1550, 1080],
name: '家电'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
demo03.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="js/echarts.js"></script>
<title>ECharts体验</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 600px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥云课完课率统计',
subtext: '2023-2024学年第2学期'
},
tooltip: {},
// 添加图列
legend: {
data: ['三月', '四月', '五月', '六月']
},
xAxis : {
data: ['实验', '测试', '挑战']
},
yAxis: {},
series: [
{
// 图表类型
type: 'bar',
// 实际数据
data: [82, 84, 81],
name: '三月'
},
{
type: 'bar',
data: [91, 85, 94],
name: '四月'
},
{
type: 'bar',
data: [85, 90, 77],
name: '五月'
},
{
type: 'bar',
data: [94, 96, 90],
name: '六月'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
2.1.4 使用网络CDN引用
以下推荐国外比较稳定的两个 CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。
Staticfile CDN(国内): https://cdn.staticfile.org/echarts/5.2.0/echarts.js
jsDelivr:https://cdn.jsdelivr.net/npm/echarts@5.2.0/dist/echarts.js
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>ECharts体验</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 1200px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: 'xx购物网',
subtext: '2024年度'
},
tooltip: {},
// 添加图列
legend: {
data: ['电脑', '手机', '家电']
},
xAxis : {
data: ['一月', '二月', '三月', '四月', '五月' , '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
},
yAxis: {},
series: [
{
// 图表类型
type: 'bar',
// 实际数据
data: [1000, 530, 920, 1468, 82, 377, 860, 1200, 100, 830, 1350, 980],
name: '电脑'
},
{
type: 'bar',
data: [100, 630, 920, 1368, 42, 37, 460, 1300, 400, 630, 1250, 780],
name: '手机'
},
{
type: 'bar',
data: [200, 230, 420, 1268, 502, 277, 160, 1400, 300, 430, 1550, 1080],
name: '家电'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
谈论思考
本地独立版本和使用网络cdn方法这个两种方法在实际项目应用中分别有哪些优势和劣势?
-
本地版本优势在于不用去考虑网络提供商关闭造成无法使用,可以修改源代码。劣势在于占用量较大,一致性必须遵守规则。
-
网络CDN优势在于可移置性比较强,不用占用自己空间或网络。劣势在于受限于CDN提供商(关闭或倒闭)就无法使用,不可以修改源代码。
2.2 ECharts配置语法运用(重之重的核心点)
产品销售数据
我们需要绘制柱状图,请问是否有标题或副标题?是否有图例,它的名字是什么?X轴的数据什么?一个类别有几回
个柱状图形?(10分钟)
法一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 780px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
// 添加图列
legend: {
data: ['衬衫', '羊毛衣', '羽绒服', '牛仔裤', '休闲鞋', '卫衣']
},
xAxis : {
data: ['女装系列']
},
yAxis: {},
series: [
{
type: 'bar',
data: [5],
name: '衬衫'
},
{
type: 'bar',
data: [20],
name: '羊毛衣'
},
{
type: 'bar',
data: [36],
name: '羽绒服'
},
{
type: 'bar',
data: [10],
name: '牛仔裤'
},
{
type: 'bar',
data: [10],
name: '休闲鞋'
},
{
type: 'bar',
data: [20],
name: '卫衣'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
法二:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 500px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
// 添加图列
legend: {
data: ['女装系列']
},
xAxis : {
data: ['衬衫', '羊毛衣', '羽绒服', '牛仔裤', '休闲鞋', '卫衣']
},
yAxis: {},
series: [
{
type: 'bar',
data: [5, 20, 36, 10, 10, 20],
name: '女装系列'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
官网示例地址:https://echarts.apache.org/examples/zh/index.html
2.2.1 练习
(1).根据下列数据完成使用ECharts柱形图的绘制(25分钟)。
代码一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 500px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥云课学习行为',
subtext: '24年3月4日至3月10日'
},
tooltip: {},
// 添加图列
legend: {
data: ['挑战']
},
xAxis : {
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
},
yAxis: {},
series: [
{
type: 'bar',
data: [71, 65, 61, 68, 74, 32, 66],
name: '挑战'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
效果:
代码二:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 750px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥云课学习行为',
subtext: '24年3月4日至3月10日'
},
tooltip: {},
// 添加图列
legend: {
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
},
xAxis : {
data: ['挑战']
},
yAxis: {},
series: [
{
type: 'bar',
data: [71],
name: '周一'
},
{
type: 'bar',
data: [65],
name: '周二'
},
{
type: 'bar',
data: [61],
name: '周三'
},
{
type: 'bar',
data: [68],
name: '周四'
},
{
type: 'bar',
data: [74],
name: '周五'
},
{
type: 'bar',
data: [32],
name: '周六'
},
{
type: 'bar',
data: [66],
name: '周日'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
效果:
(2).根据下列数据完成使用ECharts柱形图的绘制(20分钟)。
代码一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 400px; height: 300px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
// 添加图列
legend: {
data: ['电脑整机']
},
xAxis : {
data: ['笔记本', '游戏本', '平板电脑']
},
yAxis: {},
series: [
{
type: 'bar',
data: [34572, 17348, 6727],
name: '电脑整机'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
效果:
代码二:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 500px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
// 添加图列
legend: {
data: ['笔记本', '游戏本', '平板电脑']
},
xAxis : {
data: ['电脑整机']
},
yAxis: {},
series: [
{
type: 'bar',
data: [34572],
name: '笔记本'
},
{
type: 'bar',
data: [17348],
name: '游戏本'
},
{
type: 'bar',
data: [6727],
name: '平板电脑'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
效果:
提交要求
- 文件名:姓名-学号(例如:张三-2022000004)
- 文件类型:PDF
- 内容标准:代码和效果截图
- 收集要求:各小组组长进行收集,然后提交给讲师I5.提交时间:2024年3月7日12:00
2.3 ECharts数据集
数据集(dataset)是专门用来管理数据的组件。虽然每个系列都可以
在series.data中设置数据,但是从ECharts4支持数据集开始,更推荐使用数据集来管理数据。因为这样,数据可以被多个组件复用,也方便进行“数据和其他配置”分离的配置风格。毕竟,在运行时,数据是最常改变的,而其他配置大多并不会改变。
下列为需要可视化的数据集
- 绘制多柱状图
- X周为周期
- 图例为实验、测验、挑战
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 1.导入ECharts的JS库 -->
<script src="https://cdn.staticfile.org/echarts/5.2.0/echarts.js"></script>
<title>配置语法分解</title>
</head>
<body>
<!-- 2.定义ECharts绘制区域 -->
<div id="main" style="width: 750px; height: 400px"></div>
<!-- 3.定义JS编写区域 -->
<script>
<!-- 3.1 初始化ECharts图表 -->
var myChart = echarts.init(document.getElementById("main"));
<!-- 3.2 设置具体配置项和数据 -->
var option = {
// 定义标题或副标题
title: {
text: '蓝桥云课完课率统计',
subtext: '2023-2024学年第2学期'
},
tooltip: {},
// 添加图列
legend: {
data: ['实验', '测试', '挑战']
},
xAxis : {
type: 'category', // 类目, 表示指定类目轴
data: ['三月', '四月', '五月', '六月']
},
yAxis: {},
series: [
{
type: 'bar',
data: [82, 91, 85, 94],
name: '实验'
},
{
type: 'bar',
data: [84, 85, 90, 96],
name: '测试'
},
{
type: 'bar',
data: [81, 94, 77, 90],
name: '挑战'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
优点:适于对一些特殊的数据结构(如“树"、“图”、超大数据)进行一定的数据类型定制。
缺点:常需要用户先处理数据,把数据分割设置到各个系列(和类目轴)中。
此外,不利于多个系列共享一份数据,也不利于基于原始数据进行图表类型、系列的映射安排。
2.3.1 在数据集中设置数据
而数据设置在数据集(dataset)
中,会有这些好处:
- 能够贴近数据可视化常见思维方式:(1).提供数据,(2).指定数据到视觉的映射,从而形成图表
- 数据和其他配置可以被分离开来。数据常变,其他配置常不变。分开易于分别管理。
- 数据可以被多个系列或者组件复用,对于大数据量的场景,不必为每个系列创建一份数据。
- 支持更多的数据的常用格式,例如二维数组、对象数组等,一定程度上避免使用者为了数据格式而进行转换。
下面是一个最简单的dataset
的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数据集dataset</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 900px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课完课率统计',
subtext: '2023-2024学年第2学期'
},
tooltip: {},
// 图例组件,默认就是对应到dataset第一行
legend: {
},
dataset: {
// 数据源
source: [
['周期', '实验', '测验', '挑战'],
['三月', 82, 84, 81],
['四月', 91, 85, 94],
['五月', 85, 90, 77],
['六月', 94, 96, 90]
]
},
// 声明类目轴为那个轴?
xAxis: {
// 必须设置,默认情况下,类目轴对应到dataset第一列
type: 'category'
},
yAxis: {},
series: [{type: 'bar'}, {type: 'bar'}, {type: 'bar'}]
}
myChart.setOption(option);
</script>
</body>
</html>
2.3.2动手实践
根据下列数据,分别使用系列中设置数据和数据集中设置数据两种方式来进行绘制柱形图(40分钟)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数据集dataset</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 1100px; height: 500px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
// 图例组件,默认就是对应到dataset第一行
legend: {},
dataset: {
// 数据源
source: [
['产品', '一月', '二月', '三月', '四月', '五月', '六月'],
['笔记本', 1730, 1562, 3489, 4788, 6374, 4572],
['游戏本', 1874, 1347, 2817, 3329, 2313, 1248],
['平板电脑', 652, 794, 1033, 1201, 2044, 499],
['台式机', 423, 366, 729, 931, 649, 217],
['一体机', 779, 831, 1001, 717, 1246, 938],
['服务器', 246, 193, 476, 592, 423, 633]
]
},
// 声明类目轴为那个轴?
xAxis: {
// 必须设置,默认情况下,类目轴对应到dataset第一列
type: 'category'
},
yAxis: {},
series: [{type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'}, {type: 'bar'},]
}
myChart.setOption(option);
</script>
</body>
</html>
2.3.3 知识扩展(自行选学)-在数据集中利用对象数组格式设置数据
2.3.4 关于数据到图形的映射
数据可视化的一个常见思路是∶(1).提供数据,(2).指定数据到视觉的映射。简而言之,可以进行这些映射的设定:
-
指定数据集的列(column)还是行(row)映射为系列(series)。这件事可以使用
series.seriesLayoutBy
属性来配置。默认是按照列(column)来映射。 -
指定维度映射的规则:如何从 dataset的维度(一个“维度”的意思是一行/列)映射到坐标轴(如X、Y轴)、提示框
(tooltip)
、标签(label)、图形元素大小颜色等(visualMap)
。这件事可以使用series.encode
属性,以及visualMap
组件来配置〈如果有需要映射颜色大小寺悦见维度的估)。上SE于中,没有给出这种映射配置,那么ECharts 就按最常见的理解进行默认映射︰X坐标轴声明为类目轴,默认情况下会自动对应到dataset.source
中的第一列;三个柱图系列,—―对应到dataset.source
中后面每—列
高级应用扩展–把数据集dataset的行或列映射为系列series
有了数据表之后,使用者可以灵活地配置:数据如何对应到轴和图形系
用户可以使用seriesLayoutBy配置项,改变图表对于行列的理解。seriesLayoutBy可取值︰
-
‘column’:默认值。系列被安放到dataset的列上面。‘row’:系列被安放到dataset的行上面。
-
column:默认值。系列被安放到dataset的列上面。
-
row:系列被安放到dataset的行上面。
动手编写下列的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>把数据集dataset的行或列映射为系列series</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 900px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课完课率统计',
subtext: '2023-2024学年第2学期'
},
tooltip: {},
legend: {},
dataset: {
// 数据源
source: [
['周期', '实验', '测试', '挑战'],
['三月', 82, 84, 81],
['四月', 91, 85, 94],
['五月', 85, 90, 77],
['六月', 94, 96, 90]
]
},
xAxis: [
{type: 'category', gridIndex: 0},
{type: 'category', gridIndex: 1}
],
yAxis: [{gridIndex: 0}, {gridIndex: 1}],
grid: [{bottom: '55%'}, {top: '55%'}],
series: [
//这几个系列会出现在第一个直角坐标系中,每个系列对应到 dataset 的每一行。
{type: 'bar', seriesLayoutBy: 'row'},
{type: 'bar', seriesLayoutBy: 'row'},
{type: 'bar', seriesLayoutBy: 'row'},
//这几个系列会出现在第二个直角坐标系中,每个系列对应到 dataset 的每一列。
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
],
};
myChart.setOption(option);
</script>
</body>
</html>
第三章、ECharts柱状图
3.1住在组图基本概论
柱状图((或称条形图)是一种通过柱形的长度来表现数据大小的一种常用图表类型。设置柱状图的方式,是将series 的 type设为‘bar’。
在前面章节中基本都是使用的是单系列垂直状柱图和多系列垂直状柱图,在这里将不在过多的叙述和讲解。
3.1.1水平柱状图
水平柱状图其实比较简单就是将xAxis的数据添加到yAxis 中。原理就是告诉ECharts需要从y轴进行绘制。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平柱状图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 500px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
legend: {
data: ['女装系列', '男装系列']
},
xAxis: {
},
yAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
series: [
{
name: '女装系列',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
},
{
name: '男装系列',
type: 'bar',
data: [12, 10, 26, 21, 7, 18]
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
**注意: **使用水平柱状图,第一个数据在最下面,最后—个数据在最上面。
3.1.2 动手实践
- 绘制水平柱状图世界与各国人口情况
- 根据下列数据进行操作(25分钟)
代码一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平柱状图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 550px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '世界人口统计(单位:万)',
},
tooltip: {},
legend: {
data: ['2011', '2012']
},
xAxis: {
},
yAxis: {
data: ['全世界', '中国', '印度', '美国', '印尼', '巴西']
},
series: [
{
name: '2011',
type: 'bar',
data: [630230, 131744, 104970, 29030, 23489, 18203]
},
{
name: '2012',
type: 'bar',
data: [681807, 134141, 121594, 31000, 23438, 19325]
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
代码二:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数据集dataset</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 550px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '世界人口统计(单位:万)',
},
tooltip: {},
// 图例组件,默认就是对应到dataset第一行
legend: {},
dataset: {
// 数据源
source: [
['国家', '2011', '2012'],
['全世界', 630230, 681807],
['中国', 131744, 1347],
['印度', 104970, 121594],
['美国', 29030, 31000],
['印尼', 23489, 23438],
['巴西', 18203, 19325]
]
},
// 声明类目轴为那个轴?
xAxis: {},
yAxis: {
type: 'category'
},
series: [{type: 'bar'}, {type: 'bar'}]
}
myChart.setOption(option);
</script>
</body>
</html>
3.2 柱状图样式设置
柱条样式
柱条的样式可以通过series.itemStyle 设置,包括:
- 柱条的颜色
(color)
; - 柱条的描边颜色
( bordercolor )
、宽度(borderwidth )
、样式( borderType )
; - 柱条圆角的半径
(barBorderRadius )
;·柱条透明度(opacity )
; - 阴影
( shadowBlur 、shadowColor 、shadowOffsetx、 shadowOffsetY )
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平柱状图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 550px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
legend: {
data: ['女装系列']
},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {
},
series: [
{
name: '女装系列',
type: 'bar',
data: [
5,
20,
{
// 设置当前数据值
value: 36,
// 设置单个柱子的样式,itemStyle: {...具体的样式....}
itemStyle: {
// 设置柱子的颜色
color: 'red',
// 柱子的阴影
shadowColor: '#FF9966',
// 设置柱子阴影具体有左边的位置
shadowOffsetX: 3
}
},
10, 10, 20],
// 设置所有柱子的样式
itemStyle: {
// 设置柱子的边框圆角效果
barBorderRadius: 5,
// 设置边框的宽带
borderWidth: 3,
// 设置边框的样式
borderType: 'dashed',
// 设置边框的颜色
borderColor: '#ff0077',
// 设置边框模糊度
shadowBlur: 10,
// 设置边框模糊颜色
shadowColor: '#000000'
}
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
3.3为柱形图添加背景颜色
有时,我们希望能够为柱条添加背景色。从ECharts 4.7.0版本开始,这一功能可以简单地用showBackground
开启,并且可以通过backgroundstyle
配置。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>背景颜色</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 550px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
legend: {
data: ['女装系列']
},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {
},
series: [
{
name: '女装系列',
type: 'bar',
data: [5, 20, 36, 10, 10, 20],
// 表示是否显示 柱子的 背景色,默认为false
showBackground: true,
// 设置背景颜色的样式
backgroundStyle: {
color: 'rgba(50, 150, 200, 0.3)'
}
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
3.4 动手实践
- 柱条添加背景色设置要求:红色(185),绿色(170),蓝色(155),透明度(40%)
- 柱条圆角的半径:8,柱条描边宽度:2,柱条描边颜色:#990066,阴影颜色:#000000,阴影模糊度:15
- 完成时间:40分钟
- 根据下列数据,进行绘制水平或垂直多柱状图任选其一
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平柱状图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 550px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
legend: {
data: ['女装系列']
},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {
},
series: [
{
name: '女装系列',
type: 'bar',
data: [
5,
20,
{
// 设置当前数据值
value: 36,
// 设置单个柱子的样式,itemStyle: {...具体的样式....}
itemStyle: {
// 设置柱子的颜色
color: 'red',
// 柱子的阴影
shadowColor: '#FF9966',
// 设置柱子阴影具体有左边的位置
shadowOffsetX: 3
}
},
10, 10, 20],
// 设置所有柱子的样式
itemStyle: {
// 设置柱子的边框圆角效果
barBorderRadius: 5,
// 设置边框的宽带
borderWidth: 3,
// 设置边框的样式
borderType: 'dashed',
// 设置边框的颜色
borderColor: '#ff0077',
// 设置边框模糊度
shadowBlur: 10,
// 设置边框模糊颜色
shadowColor: '#000000'
}
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
提交要求
- 文件名:姓名–学号(例如:张三-2022000004)
- 文件类型:PDF
- 2024年3月7日布置的所有动手实践
- 内容标准:代码和效果截图
- 收集要求∶各小组组长进行收集,然后提交给讲提交时间:2024年3月7日23:59:59之前
3.5 堆叠柱状图
3.5.1 垂直堆叠
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>堆叠柱状图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 500px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
legend: {
data: ['女装系列', '男装系列']
},
xAxis: {
data: ['衬衫', '羊毛衫', '羽绒服', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '女装系列',
type: 'bar',
data: [5, 20, 36, 10, 10, 20],
// 堆叠的轴向
stack: 'x'
},
{
name: '男装系列',
type: 'bar',
data: [12, 10, 26, 21, 7, 18],
stack: 'x'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
3.5.1 水平堆叠
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>堆叠柱状图(水平)</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 500px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商销售平台',
subtext: '生活居家类'
},
tooltip: {},
legend: {
data: ['女装系列', '男装系列']
},
xAxis: {},
yAxis: {
data: ['衬衫', '羊毛衫', '羽绒服', '裤子', '高跟鞋', '袜子']
},
series: [
{
name: '女装系列',
type: 'bar',
data: [5, 20, 36, 10, 10, 20],
// 堆叠的轴向
stack: 'y'
},
{
name: '男装系列',
type: 'bar',
data: [12, 10, 26, 21, 7, 18],
stack: 'y'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
3.6 动手实践
- 制堆叠柱状图蓝桥班各年级学生情况
- 根据下列数据进行操作(25分钟)
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>堆叠柱状图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 500px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥班年级学生统计',
},
tooltip: {},
legend: {
data: ['男', '女']
},
xAxis: {},
yAxis: {
data: ['2019级', '2020级', '2021级', '2022级', '2023级']
},
series: [
{
name: '男',
type: 'bar',
data: [56, 74, 79, 95, 97],
// 堆叠的轴向
stack: 'y'
},
{
name: '女',
type: 'bar',
data: [28, 37, 45, 57, 61],
stack: 'y'
}
]
}
myChart.setOption(option);
</script>
</body>
</html>
效果:
3.7 高级柱形图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>高级图表</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 1100px; height: 600px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
// 图表背景颜色
backgroundColor: '#EEEFFF',
title: {
text: '蓝桥购电商销售平台',
textStyle: {
color: '#f96'
},
subtext: '用户入口',
subtextStyle: {
color: '#bbb'
},
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎', '百度', '谷歌', '必应', '其它']
},
toolbox: {
show: true,
orient: 'vertical',
x: 'right',
y: 'center',
feature: {
mark: { show: true },
// 交互按钮图形
magicType: { show: true, type: ['line', 'bar', 'stack', 'tiled']},
// 重置按钮
restore: { show: true },
// 下载按钮
saveAsImage: { show: true }
}
},
xAxis: [
{
type: 'category',
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '直接访问',
type: 'bar',
data: [320, 332, 301, 334, 390, 330, 320],
},
{
name: '邮件营销',
type: 'bar',
stack: '广告',
data: [120, 132, 101, 134, 90, 230, 220]
},
{
name: '联盟广告',
type: 'bar',
stack: '广告',
data: [220, 182, 191, 234, 290, 330, 310],
},
{
name: '视频广告',
type: 'bar',
stack: '广告',
data: [150, 232, 201, 154, 190, 330, 3410],
},
{
name: '搜索引擎',
type: 'bar',
data: [862, 1018, 964, 1026, 1679, 1600, 1570],
markLine: {
itemStyle: {
normal: {
lineStyle: {
type: 'dashed'
}
}
},
data: [
[{type: 'min'}, {type: 'max'}]
]
}
},
{
name: '百度',
type: 'bar',
barWidth: 5,
stack: '搜索引擎',
data: [620, 732, 701, 734, 1090, 1130, 1120],
},
{
name: '谷歌',
type: 'bar',
stack: '搜索引擎',
data: [120, 132, 101, 134, 290, 230, 220],
},
{
name: '必应',
type: 'bar',
stack: '搜索引擎',
data: [60,72, 71, 74, 190, 130,120],
},
{
name: '其它',
type: 'bar',
stack: '搜索引擎',
data: [62, 82, 91, 84, 190, 110, 120],
}
]
};
myChart.setOption(option);
</script>
</body>
</html>
3.8 大规模柱状数据选取范围性查看
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="js/echarts.js"></script>
<title>大规模柱状数据选取范围性查看</title>
</head>
<body>
<div id="main" style="width: 900px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
const dataCount = 1000000;
const data = generateData(dataCount)
option = {
title:{
text:'1000000条随机产生数据',
},
tooltip:{},
dataZoom:[
{
type:'slider'
}
],
xAxis:{
data:data.categoryData,
},
yAxis:{},
series:[
{
type:'bar',
data:data.valueData
}
],
large: true
};
// 模拟数据
function generateData(count) {
let baseValue = Math.random() * 1000;
let time = +new Date(2011, 0, 1);
let smallBaseValue;
function next(idx) {
smallBaseValue =
idx % 30 === 0
? Math.random() * 700
: smallBaseValue + Math.random() * 500 - 250;
baseValue += Math.random() * 20 - 10;
return Math.max(0, Math.round(baseValue + smallBaseValue) + 3000);
}
const categoryData = [];
const valueData = [];
for (let i = 0; i < count; i++) {
categoryData.push(
echarts.format.formatTime('yyyy-MM-dd\nhh:mm:ss', time, false)
);
valueData.push(next(i).toFixed(2));
time += 1000;
}
return {
categoryData: categoryData,
valueData: valueData
};
}
myChart.setOption(option);
</script>
</body>
</html>
第四章、ECharts 折线图
4.1 最简单的折线图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>最简单的折线图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课学习有效时长统计',
subtext: '2024月4日至3月8日'
},
tooltip: {},
legend: {
data: ['张三']
},
xAxis: {
data: ['周一', '周二', '周三', '周四', '周五']
},
yAxis: {},
series: [
{
name: '张三',
type: 'line',
data: [108, 45, 117, 29, 167]
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
4.2 动手实践
1.完成时间:20分钟
2.根据下列数据,绘制折线图
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>最简单的折线图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
legend: {
data: ['笔记本']
},
xAxis: {
data: ['一月', '二月', '三月', '四月', '五月', '六月']
},
yAxis: {},
series: [
{
name: '笔记本',
type: 'line',
data: [1730, 1562, 3489, 4788, 6374, 4572]
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
效果:
4.3 堆叠折线图
与堆叠柱状图类似,堆叠折线图也是用系列的stack
设置哪些系列堆叠在一起。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>堆叠折线图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课学习有效时长统计',
subtext: '2024月4日至3月8日'
},
tooltip: {},
legend: {
data: ['张三', '李四', '王五']
},
xAxis: {
data: ['周一', '周二', '周三', '周四', '周五']
},
yAxis: {},
series: [
{
name: '张三',
type: 'line',
data: [108, 45, 117, 29, 167],
stack: 'x'
},
{
name: '李四',
type: 'line',
data: [78, 56, 79, 43, 123],
stack: 'x'
},
{
name: '王五',
type: 'line',
data: [142, 92, 62, 86, 236],
stack: 'x'
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
4.4 动手实践
1.完成时间:30分钟
2.根据下列数据,绘制堆叠折线图
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>堆叠折线图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云购电商平台',
},
tooltip: {},
legend: {
data: ['笔记本', '游戏本', '平板电脑', '台式机']
},
xAxis: {
data: ['一月', '二月', '三月', '四月', '五月', '六月']
},
yAxis: {},
series: [
{
name: '笔记本',
type: 'line',
data: [1730, 1562, 3489, 4788, 6374, 4572],
stack: 'x'
},
{
name: '游戏本',
type: 'line',
data: [1874, 1347, 2817, 3329, 2313, 1248],
stack: 'x'
},
{
name: '平板电脑',
type: 'line',
data: [652, 794, 1033, 1201, 2044, 499],
stack: 'x'
},
{
name: '台式机',
type: 'line',
data: [423, 366, 729, 931, 649, 217],
stack: 'x'
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
4.5 设置区域填充色
但是不同的是,如果不加说明的话,我们很难判断出这是一个堆叠折线图,还是一个普通的折线图。所以,对于堆叠折线图而言,一般建议使用区域填充色以表明堆叠的情况。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>区域填充色</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课学习有效时长统计',
subtext: '2024月4日至3月8日'
},
tooltip: {},
legend: {
data: ['张三', '李四', '王五']
},
xAxis: {
data: ['周一', '周二', '周三', '周四', '周五']
},
yAxis: {},
series: [
{
name: '张三',
type: 'line',
data: [108, 45, 117, 29, 167],
stack: 'x',
// 设置区域填充色
areaStyle: {}
},
{
name: '李四',
type: 'line',
data: [78, 56, 79, 43, 123],
stack: 'x',
areaStyle: {}
},
{
name: '王五',
type: 'line',
data: [142, 92, 62, 86, 236],
stack: 'x',
areaStyle: {}
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
4.6 区域面积图
区域面积图将折线到坐标轴的空间设置背景色
,用区域面积表达数据
。相比普通的折线图,区域面积图的视觉效果更加饱满丰富,在系列不多的场景
下尤其适用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>区域面积图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课学习有效时长统计',
subtext: '2024月4日至3月8日'
},
tooltip: {},
legend: {
data: ['张三', '李四', '王五']
},
xAxis: {
data: ['周一', '周二', '周三', '周四', '周五']
},
yAxis: {},
series: [
{
name: '张三',
type: 'line',
data: [108, 45, 117, 29, 167],
// 设置区域填充色
areaStyle: {}
},
{
name: '李四',
type: 'line',
data: [78, 56, 79, 43, 123],
areaStyle: {
color: '#ffff00'
}
},
{
name: '王五',
type: 'line',
data: [142, 92, 62, 86, 236],
areaStyle: {
color: '#ff0000',
opacity: 0.5
}
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
4.7 动手实践
1.完成时间:15分钟
2.根据下列数据,绘制堆叠区域填充色折线图
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>区域填充色</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 300px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
legend: {
data: ['笔记本', '游戏本', '平板电脑', '台式机']
},
xAxis: {
data: ['一月', '二月', '三月', '四月', '五月', '六月']
},
yAxis: {},
series: [
{
name: '笔记本',
type: 'line',
data: [1730, 1562, 3489, 4788, 6374, 4572],
stack: 'x',
// 设置区域填充色
areaStyle: {}
},
{
name: '游戏本',
type: 'line',
data: [1874, 1347, 2817, 3329, 2313, 1248],
stack: 'x',
areaStyle: {}
},
{
name: '平板电脑',
type: 'line',
data: [652, 794, 1033, 1201, 2044, 499],
stack: 'x',
areaStyle: {}
},
{
name: '台式机',
type: 'line',
data: [423, 366, 729, 931, 649, 217],
stack: 'x',
areaStyle: {}
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
效果:
1.完成时间:30分钟
2.根据下列数据,绘制区域面积图
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>区域面积图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 300px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
legend: {
data: ['笔记本', '游戏本', '平板电脑', '台式机']
},
xAxis: {
data: ['七月', '八月', '九月', '十月', '十一月', '十二月']
},
yAxis: {},
series: [
{
name: '笔记本',
type: 'line',
data: [2347, 1767, 4217, 5322, 5673, 1796],
// 设置区域填充色
areaStyle: {}
},
{
name: '游戏本',
type: 'line',
data: [2027, 1532, 3044, 3151, 3402, 2033],
areaStyle: {}
},
{
name: '平板电脑',
type: 'line',
data: [1032, 1142, 1417, 1527, 2623, 643],
areaStyle: {
color: '#ff0000',
opacity: 0.5
}
},
{
name: '台式机',
type: 'line',
data: [547, 452, 912, 1026, 773, 328],
areaStyle: {}
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
效果:
4.8 平滑曲线图
平滑曲线图也是折线图的一种变形,这种更柔和的样式也是一种不错的视觉选择。使用时,只需要将折线图系列的 smooth
属性设置为true
即可。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>平滑曲面图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 400px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥云课学习有效时长统计',
subtext: '2024月4日至3月8日'
},
tooltip: {},
legend: {
data: ['张三']
},
xAxis: {
data: ['周一', '周二', '周三', '周四', '周五']
},
yAxis: {},
series: [
{
name: '张三',
type: 'line',
data: [108, 45, 117, 29, 167],
// smooth 变送是否为曲面效果,默认为:false(否)
smooth: true
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
4.9 动手实践
1.完成时间:20分钟
2.根据下列数据,绘制平滑曲面图
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>平滑曲面图</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 300px"></div>
<script>
var myChart = echarts.init(document.getElementById("main"));
var option = {
title: {
text: '蓝桥购电商平台',
},
tooltip: {},
legend: {
data: ['笔记本', '游戏本', '平板电脑', '台式机']
},
xAxis: {
data: ['七月', '八月', '九月', '十月', '十一月', '十二月']
},
yAxis: {},
series: [
{
name: '笔记本',
type: 'line',
data: [2347, 1767, 4217, 5322, 5673, 1796],
smooth: true
},
{
name: '游戏本',
type: 'line',
data: [2027, 1532, 3044, 3151, 3402, 2033],
smooth: true
},
{
name: '平板电脑',
type: 'line',
data: [1032, 1142, 1417, 1527, 2623, 643],
smooth: true
},
{
name: '台式机',
type: 'line',
data: [547, 452, 912, 1026, 773, 328],
smooth: true
}
]
}
myChart.setOption(option)
</script>
</body>
</html>
效果:
提交要求
-
文件名:姓名–学号(例如︰张三-2022000004)
-
文件类型:PDF
-
2024年3月8日布置的所有动手实践(一共是5个,从堆叠柱状图开始)
-
内容标准:代码和效果截图
-
收集要求:各小组组长进行收集,然后提交给讲师
-
提交时间:2024年3月10日23:59:59之前
说明:接下来时间小朋友们进行巩固复习本周开始学生的所有ECharts的相关知识点。
数据运用与分析
2024.04.20饼图
In [2]:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei'
# 准备数据
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# startangle 设置饼图的起始角度 默认是3点钟方向
# counterclock 设置旋转方向 默认是True
# autopct 显示每一部分所占百分比
# shadow 设置饼图的阴影 默认False
# pctdistance 设置百分比值与饼图中心的距离 默认为0.6
# labeldistance 设置标签与饼图中心的距离 默认为1.1
# wedgeprops 设置圆环的宽度
plt.pie(data, radius=1, labels=pie_labels, startangle=180, counterclock=False,
autopct='%.2f%%', shadow=True, pctdistance=0.8, labeldistance=1.2,
wedgeprops={'width': 0.6} )
plt.show()
2024.04.20支付宝数据饼图
In [3]:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei'
# 准备数据
data = np.array([800, 100, 1000, 200, 300, 200, 200, 200])
pie_labels = np.array(['购物', '人情往来', '餐饮美食', '通讯物流', '生活日用', '交通出行', '休闲娱乐', '其他'])
div = [0, 0, 0, 0, 0.2, 0, 0, 0.2]
# startangle 设置饼图的起始角度 默认是3点钟方向
# counterclock 设置旋转方向 默认是True
# autopct 显示每一部分所占百分比
# shadow 设置饼图的阴影 默认False
# pctdistance 设置百分比值与饼图中心的距离 默认为0.6
# labeldistance 设置标签与饼图中心的距离 默认为1.1
# wedgeprops 设置圆环的宽度
plt.pie(data, radius=1, labels=pie_labels, startangle=180, counterclock=False,
autopct='%.2f%%', shadow=True, pctdistance=0.8, labeldistance=1.1,
wedgeprops={'width': 0.8}, explode=div)
plt.show()
2024.04.20散点图
In [4]:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei'
# 准备数据
num = 100
# 生成0-1的随机数
x = np.random.rand(num)
y = np.random.rand(num)
y2 = np.random.rand(num)
area = (10 * np.random.rand(num)) * 2
# c 散点颜色
# alpha 透明度
# marker 设置散点的形状
# linewidths 设置散点边框的宽度
# edgecolors 设置边框颜色
plt.scatter(x, y, c='red', alpha=0.5, s=area, linewidths=2, edgecolors='g')
plt.scatter(x, y2, c='yellow', alpha=0.6, marker='d')
# print(x)
plt.show()
2024.04.20汽车速度与制动距离散点图
In [5]:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei'
# 准备数据
num = 100
# 生成0-1的随机数
x = np.arange(10, 210, 10)
y = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
17.5, 24.1, 31.5, 39.9, 48.2,
59.5, 70.8, 83.1, 96.4, 110.7,
126.0, 142.2, 159.4, 177.6, 196.8])
plt.scatter(x, y, c='b', marker='s', alpha=0.3, edgecolors='y')
plt.title('汽车速度与制定距离散点图')
plt.xlabel('速度km/h')
plt.ylabel('制动距离m')
plt.show()
2024.04.20坐标图图表
In [6]:
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(20, 6), dpi=80)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos(x)
plt.plot(x, y1, x, y2)
# print(x)
# 设置坐标轴标签
plt.xlabel("x轴", labelpad=10)
plt.ylabel("y轴")
# 设置坐标轴刻度范围
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.ylim(-1.5, 1.5)
# 设置刻度标签
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', 0, r'$\pi/2$', r'$\pi$'],
rotation=45)
# rotation='vertical'
# 添加标题
plt.title("正弦曲线与余弦曲线", loc="center", pad=20)
# 添加图例
plt.legend(['正弦', '余弦'], title='图例', loc='upper left',
shadow=True, fancybox=True, ncol=2)
plt.show()
![img](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRQAAAHcCAYAAACnEiYiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAxOAAAMTgF/d4wjAACYXUlEQVR4nOzdZ3iU1f718e9Mei8ECBB67z1AkKr0Jh2kSFMBUY+oqEfsWLBgR1CqgkoVROkd6S303gMESEJ6nfK8GOV/eKREhdyTZH2uKxeQ3Mms