数据可视化
数据可视化主要目的:借助于图形化手段,清晰有效地传达与沟通信息。
数据可视化可以把数据从冰冷的数字转换成图形,揭示蕴含在数据中的规律和道理。
常见的数据可视化库:
-
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>
折线图
第一步:查看官网实例