数据可视化
数据可视化主要目的:借助于图形化手段,清晰有效地传达与沟通信息。
数据可视化可以把数据从冰冷的数字转换成图形,揭示蕴含在数据中的规律和道理。
常见的数据可视化库:
-
D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)
-
ECharts.js 百度出品的一个开源 Javascript 数据可视化库
-
Highcharts.js 国外的前端数据可视化库,非商用免费,被许多国外大公司所使用
-
AntV 蚂蚁金服全新一代数据可视化解决方案 等等
-
Highcharts 和 Echarts 就像是 Office 和 WPS 的关系
ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
大白话:
官网地址:https://echarts.apache.org/zh/index.html
ECharts入门
ECharts初体验
ECharts入门教程整理来自于B站的UP主。
使用步骤:
1、引入echarts 插件文件到html页面中

选择合适版本进行下载

然后引入
<script src="js/echarts.min.js"></script>
2、准备一个具备大小的DOM容器
基本语法:
-
<div id="main" style="width: 600px;height:400px;"></div> -
<!-- 必须要有宽度和高度 -->
示例:

3、初始化echarts实例对象
var myChart = echarts.init(document.getElementById('main'));
4、指定配置项和数据(option)
-
var option = { -
xAxis: { -
type: 'category', -
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] -
}, -
yAxis: { -
type: 'value' -
}, -
series: [{ -
data: [820, 932, 901, 934, 1290, 1330, 1320], -
type: 'line' -
}] -
};
5、将配置项设置给echarts实例对象
myChart.setOption(option);
完整实例:
-
-
<html> -
<head> -
<meta charset="utf-8"> -
<title>数据可视化-ECharts</title> -
<style type="text/css"> -
.echarts-box { -
widows: 400px; -
height: 400px; -
background-color: #B3D8FF; -
} -
</style> -
</head> -
<body> -
<!-- 1.准备一个带长度和宽度的盒子 --> -
<div class="echarts-box"></div> -
<!-- 2.引入echarts.js --> -
<script src="js/echarts.min.js"></script> -
<script> -
/* 3.初始化实例对象,语法:echarts.init(dom容器) */ -
var myChart = echarts.init(document.querySelector(".echarts-box")); -
/* 4.指定配置项和数据 */ -
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>
浏览器查看结果

ECharts常用基础配置
各配置介绍如下:
- title:设置图表的标题
- tooltip:图表的提示框组件。其中trigger表示触发方式。
- legend:图例组件,提示图表中线代表着什么。
- toolbox:工具箱组件,可以另存为图片等功能。
- color:调色盘颜色列表,设置线条的演示,后面跟个数组,设置每条线的颜色。
- grid:网格配置。控制柱状图等图表的大小。
- left:图表距离左侧DOM容器的。
- right:距离右侧DOM容器。
- bottom:距离下侧DOM容器。
- containLabel:是否显示刻度标签,如果为true就显示,否则就不显示。
- xAxis:设置x轴的相关配置
- type:可以是category、value等。可以设置使数据横轴显示或纵轴显示
- boundaryGap:是否让我们的线条和坐标轴有缝隙。
- data:x轴显示的相关信息。
- yAxis:设置y轴的相关配置
- series:系列图表配置,决定着显示那种类型的图表。是一个数组,数组里面存放着对象,每一个对象代表一条数据。
- stack:数据堆叠,同个类目轴上系列配置相同的
stack值后 后一个系列的值会在前一个系列的值上相加。 - data:每一条线中的数据,是一个数字数组。
- type:
- name:series里面有了name值则legend里面的data值可以删除。
- stack:数据堆叠,同个类目轴上系列配置相同的
参考图:

示例:
-
option = { -
// color设置我们线条的颜色 注意后面是个数组 -
color: ['pink', 'red', 'green', 'skyblue'], -
// 设置图表的标题 -
title: { -
text: '折线图堆叠123' -
}, -
// 图表的提示框组件 -
tooltip: { -
// 触发方式 -
trigger: 'axis' -
}, -
// 图例组件 -
legend: { -
// series里面有了 name值则 legend里面的data可以删掉 -
}, -
// 网格配置 grid可以控制线形图 柱状图 图表大小 -
grid: { -
left: '3%', -
right: '4%', -
bottom: '3%', -
// 是否显示刻度标签 如果是true 就显示 否则反之 -
containLabel: true -
}, -
// 工具箱组件 可以另存为图片等功能 -
toolbox: { -
feature: { -
saveAsImage: {} -
} -
}, -
// 设置x轴的相关配置 -
xAxis: { -
type: 'category', -
// 是否让我们的线条和坐标轴有缝隙 -
boundaryGap: false, -
data: ['星期一', '周二', '周三', '周四', '周五', '周六', '周日'] -
}, -
// 设置y轴的相关配置 -
yAxis: { -
type: 'value' -
}, -
// 系列图表配置 它决定着显示那种类型的图表 -
series: [ -
{ -
name: '邮件营销', -
type: 'line', -
-
data: [120, 132, 101, 134, 90, 230, 210] -
}, -
{ -
name: '联盟广告', -
type: 'line', -
-
data: [220, 182, 191, 234, 290, 330, 310] -
}, -
{ -
name: '视频广告', -
type: 'line', -
-
data: [150, 232, 201, 154, 190, 330, 410] -
}, -
{ -
name: '直接访问', -
type: 'line', -
-
data: [320, 332, 301, 334, 390, 330, 320] -
} -
] -
};
效果:

柱形图
那么如何来做这个柱形图呢?
第一步:查看官网类似案例
-
官网找到类似实例, 适当分析,并且引入到HTML页面中

复制里面的option配置到本地文件
-
option = { -
xAxis: { -
type: 'category', -
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] -
}, -
yAxis: { -
type: 'value' -
}, -
series: [{ -
data: [120, 200, 150, 80, 70, 110, 130], -
type: 'bar', -
showBackground: true, -
backgroundStyle: { -
color: 'rgba(220, 220, 220, 0.8)' -
} -
}] -
};
本地运行

根据需求定制图表
- 设置柱状图的大小

-
改变X轴标签颜色为红色

- 不显示X轴的样式

-
设置y轴的文字标签样式

-
设置y轴的轴线的样式

- y轴分割线的样式

- 修改柱形图的柱子宽度和圆角

- 修改柱状图的工具提示

- 更换对应数据

- 图表随屏幕自适应

完整代码:
-
-
<html> -
<head> -
<meta charset="utf-8"> -
<title>数据可视化-ECharts</title> -
<style type="text/css"> -
.echarts-box { -
width: 400px; -
height: 400px; -
background-color: #B3D8FF; -
} -
</style> -
</head> -
<body> -
<!-- 1.准备一个带长度和宽度的盒子 --> -
<div class="echarts-box"></div> -
<!-- 2.引入echarts.js --> -
<script src="js/echarts.min.js"></script> -
<script> -
/* 3.初始化实例对象,语法:echarts.init(dom容器) */ -
var myChart = echarts.init(document.querySelector(".echarts-box")); -
/* 4.指定配置项和数据 */ -
var option = { -
// 设置柱状图的颜色 -
color: ["#2F89CF"], -
// 设置工具提示 -
tooltip: { -
trigger: 'axis', -
axisPointer: { -
// 坐标轴指示器, 坐标轴触发有效 -
type: "shadow" // 默认为直线,可选为"line"/"shadow" -
} -
}, -
// 设置柱状图的大小 -
grid: { -
left: "0%", -
top: "10px", -
right: '0%', -
bottom: "4%", -
containLabel: true -
}, -
// X轴的配置 -
xAxis: { -
type: 'category', -
data: ['小学生', '初中生', '高中生', '大学生', '研究生', '博士生'], -
axisTick: { -
alignWithLabel: true -
}, -
// 修改刻度标签相关样式 -
axisLabel: { -
color: 'red', -
fontSize: '12' -
}, -
// 显示x坐标轴的样式 -
show: true -
}, -
// Y轴的配置 -
yAxis: { -
type: 'value', -
// y轴文字标签的样式 -
axisLabel: { -
color: "rgba(255, 255, 255, 0.6)", -
fontSize: '12' -
}, -
// y轴线的样式 -
axisLine: { -
lineStyle: { -
color: "rgba(255, 255, 255, 0.6)", -
width: 2, -
} -
}, -
// y轴分割线的样式 -
splitLine: { -
lineStyle: { -
color: 'rgba(220, 220, 220, 0.8)', -
width: 1 -
} -
} -
}, -
series: [{ -
data: [100, 90, 80, 50, 20, 5], -
type: 'bar', -
showBackground: true, -
backgroundStyle: { -
color: 'rgba(220, 220, 220, 0.8)' -
}, -
// 修改柱形图中柱子的宽度 -
barWidth: '20%', -
itemStyle: { -
// 修改柱子圆角 -
barBorderRadius: 20 -
} -
}] -
}; -
/* 把配置项给实例对象 */ -
myChart.setOption(option); -
/* 让图表跟随屏幕自动的去适应 */ -
window.addEventListener("resize", function() { -
myChart.resize(); -
}) -
</script> -
</body> -
</html>
水平柱形图
第一步:查看官网示例

复制option配置
-
option = { -
title: { -
text: '世界人口总量', -
subtext: '数据来自网络' -
}, -
tooltip: { -
trigger: 'axis', -
axisPointer: { -
type: 'shadow' -
} -
}, -
legend: { -
data: ['2011年', '2012年'] -
}, -
grid: { -
left: '3%', -
right: '4%', -
bottom: '3%', -
containLabel: true -
}, -
xAxis: { -
type: 'value', -
boundaryGap: [0, 0.01] -
}, -
yAxis: { -
type: 'category', -
data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)'] -
}, -
series: [ -
{ -
name: '2011年', -
type: 'bar', -
data: [18203, 23489, 29034, 104970, 131744, 630230] -
}, -
{ -
name: '2012年', -
type: 'bar', -
data: [19325, 23438, 31000, 121594, 134141, 681807] -
} -
] -
};
引入后,运行

自定义定制
- 修改图表大小

- 不显示x轴相关信息

-
不显示y轴线条和刻度

- 设置刻度标签的文本颜色

-
设置嵌套柱形图
设置成如下图的样式:

首先将第一组柱子设置样式

设置数据显示在柱子里面

不同的柱子设置不同的颜色

设置两组y轴,将yAxis设置为一个数组,数组是两个对象,分别表示两组y轴。

完成嵌套柱形图

完整代码:
-
-
<html> -
<head> -
<meta charset="utf-8"> -
<title>数据可视化-ECharts</title> -
<style type="text/css"> -
.echarts-box { -
width: 400px; -
height: 400px; -
background-color: #B3D8FF; -
} -
</style> -
</head> -
<body> -
<!-- 1.准备一个带长度和宽度的盒子 --> -
<div class="echarts-box"></div> -
<!-- 2.引入echarts.js --> -
<script src="js/echarts.min.js"></script> -
<script> -
var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"]; -
/* 3.初始化实例对象,语法:echarts.init(dom容器) */ -
var myChart = echarts.init(document.querySelector(".echarts-box")); -
/* 4.指定配置项和数据 */ -
var option = { -
// 修改图表位置 -
grid: { -
top: "10%", -
left: "22%", -
bottom: "10%", -
containLabel: true -
}, -
title: { -
text: '世界人口总量', -
subtext: '数据来自网络' -
}, -
tooltip: { -
trigger: 'axis', -
axisPointer: { -
type: 'shadow' -
} -
}, -
legend: { -
data: ['2011年', '2012年'] -
}, -
// x轴 -
xAxis: { -
// 不显示x轴样式 -
show: false -
}, -
// y轴 -
yAxis: [{ -
type: 'category', -
data: ['巴西', '印尼', '美国', '印度', '中国'], -
// 不显示y轴线条 -
axisLine: { -
show: false -
}, -
// 不显示刻度 -
axisTick: { -
show: false -
}, -
// 把刻度标签里面的文字颜色设置为白色 -
axisLabel: { -
color: "#fff" -
} -
}, -
{ -
data: [702, 350, 610, 793, 664], -
// 不显示y轴线条 -
axisLine: { -
show: false -
}, -
// 不显示刻度 -
axisTick: { -
show: false -
}, -
// 把刻度标签里面的文字颜色设置为白色 -
axisLabel: { -
color: "#fff" -
} -
} -
], -
series: [ -
// 第一组数据(即第一个柱子) -
{ -
name: '条', -
type: 'bar', -
data: [70, 34, 60, 78, 69], -
yAxisIndex: 0, -
// 修改第一组柱子的圆角 -
itemStyle: { -
barBorderRadius: 20, -
// 次数的color可以修改柱子的颜色 -
// params是传进来的柱子对象 -
color: function(params) { -
// console.log(params); -
// dataIndex是当前柱子的索引号 -
return myColor[params.dataIndex]; -
} -
}, -
// 柱子之间的距离 -
barCategoryGap: 50, -
// 柱子的宽度 -
barWidth: 10, -
// 显示柱子内的文字 -
label: { -
show: true, -
position: "inside", -
// {c}会自动解析为数据data里面的数据 -
formaater: "{c}%" -
} -
}, -
// 第二组数据(即第二个柱子) -
{ -
name: '框', -
type: 'bar', -
data: [100, 100, 100, 100, 100], -
yAxisIndex: 1, -
barCategoryGap: 50, -
barWidth: 15, -
itemStyle: { -
color: "none", -
borderColor: "#00C1DE", -
borderWidth: 3, -
barBorderRadius: 15 -
} -
} -
] -
}; -
-
/* 把配置项给实例对象 */ -
myChart.setOption(option); -
/* 让图表跟随屏幕自动的去适应 */ -
window.addEventListener("resize", function() { -
myChart.resize(); -
}) -
</script> -
</body> -
</html>

折线图
第一步:查看官网实例

