ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求
官网:https://echarts.apache.org/
1.简单的写一个小案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
var myEcharts = echarts.init(main, null, {
width: 800,
height: 600
})
//设置数据及格式(配置)
var option = {
title: [{
text: 'Tangential Polar Bar Label Position (middle)'
}],
polar: {
radius: [30, '80%']
},
angleAxis: {
max: 4,
startAngle: 75
},
radiusAxis: {
type: 'category',
data: ['a', 'b', 'c', 'd']
},
tooltip: {},
series: {
type: 'bar',
data: [2, 1.2, 2.4, 3.6],
coordinateSystem: 'polar',
label: {
show: true,
position: 'middle',
formatter: '{b}: {c}'
}
}
};
//第四部
myEcharts.setOption(option)
</script>
</body>
</html>
效果:
一、柱状图
1、一个简单的柱状图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
var myEcharts = echarts.init(main, null, {
width: "auto",
height: 600
})
//设置数据及格式(配置)
var 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(180, 180, 180, 0.2)'
}
}]
};
//第四部
myEcharts.setOption(option)
// 实现响应式
window.onresize = function() {
myEcharts.resize()
}
</script>
</body>
</html>
注:在未指定图表容器大小时,可以在图表初始化时给容器指定大小
效果:
2.给柱状图设置样式
- 自定义样式可以在官网点击(文档>使用手册>样式>找到主题编辑器点击就可以去设置了,设置完成后进行下载即可)
- 全局样式:color:["颜色","颜色]
- 局部样式:itemStyle: {color: "颜色"}
以上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<!-- 自定义样式 -->
<script src="js/customed.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
// customed:<!-- 自定义样式 -->
var myEcharts = echarts.init(main, "customed", {
width: 800,
height: 600
})
//设置数据及格式(配置)
var option = {
// 全局样式
// color: ["green", "red"],
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [{
// 局部样式
data: [120, {
value: 200,
itemStyle: {
color: "red"
}
}, 150, 80, 70, 110, 130],
type: 'bar',
showBackground: true,
backgroundStyle: {
color: 'rgba(180, 180, 180, 0.2)'
}
}]
};
//第四部
myEcharts.setOption(option)
</script>
</body>
</html>
效果:
3.设置坐标轴的样式
- 标题:name
-
轴线:axisLine
-
刻度:axisTick
-
单位:axisLabel
以上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
// customed:<!-- 自定义样式 -->
var myEcharts = echarts.init(main, null, {
width: 800,
height: 600
})
//设置数据及格式(配置)
var option = {
// 全局样式
dataset: {
// dimensions: ["product", "2015", "2016", "2017"],
source: [
['产品', '2015', '2016', '2017'],
['拿铁', 50, 80, 30],
['奶茶', 85, 50, 40],
['芝士可可', 20, 30, 60],
['布朗尼', 60, 90, 130],
]
},
xAxis: {
type: 'category',
},
yAxis: {
type: 'value',
// 标题
name: "销量",
// nameLocation: "middle",
// 轴线
axisLine: {
// 是否显示
show: true,
symbol: ["none", "arrow"], //轴线箭头
// 设置轴线样式
lineStyle: {
type: "dashed",
color: "red"
}
},
// axisTick:刻度
axisTick: {
// 是否显示
show: true,
// 刻度长度
length: 6,
// 样式
lineStyle: {
color: "green"
}
},
// axisLabel:单位
axisLabel: {
formatter: "{value}(销量)",
fontSize: 12,
}
},
series: [{
type: 'bar'
}, {
type: 'bar'
}, {
type: 'bar'
}]
};
//第四部
myEcharts.setOption(option)
</script>
</body>
</html>
效果:
4.设置样式
使用itemStyle设置(样式都和css很像)
响应式: window.onresize = function() {myEcharts.resize()}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
var myEcharts = echarts.init(main, null, {
width: "auto",
height: 600
})
//设置数据及格式(配置)
var option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
// stack:堆叠
series: [{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar',
stack: "x",
itemStyle: {
color: "green"
},
barWidth: "20%"
}, {
data: [10, 100, 60, 200, 100, 50, 20],
type: 'bar',
// stack: "x",
itemStyle: {
color: "red",
borderColor: "green",
borderWidth: 2,
shadowColor: "blue",
borderType: "dashed",
// 圆角
barBorderRadius: 10
}
}]
};
//第四部
myEcharts.setOption(option)
// 实现响应式
window.onresize = function() {
myEcharts.resize()
}
</script>
</body>
</html>
效果:
案例:温度表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
// customed:<!-- 自定义样式 -->
var myEcharts = echarts.init(main, null, {
width: "auto",
height: 600
})
//设置数据及格式(配置)
var option = {
//
legend: {
// data: ["降水量", "温度"]
},
dataset: {
// dimensions: ["product", "2015", "2016", "2017"],
source: [
// 降水量:[2.7, 4.9, 8.3, 21.2, 34.2, 78.1, 185.2, 159.7, 45.5, 21.8, 7.4, 2.8]
// 温度:[-3.7, -0.7, 5.8, 14.2, 19.9, 24.4, 26.2, 24.8, 20.0, 13.1, 4.6, -1.5]
["月份", "降水量", "温度"],
['1月', 2.7, -3.7],
['2月', 4.9, -0.7],
['3月', 8.3, 5.8],
['4月', 21.2, 14.2],
['5月', 34.2, 19.9],
['6月', 78.1, 24.4],
['7月', 185.2, 26.2],
['8月', 159.7, 24.8],
['9月', 45.5, 20.0],
['10月', 21.8, 13.1],
['11月', 7.4, 4.6],
['12月', 2.8, -1.5],
]
},
xAxis: {
type: 'category',
},
yAxis: [{
type: 'value',
name: "降水量",
// 轴线
axisLine: {
show: true,
symbol: ["none", "arrow"]
},
// 刻度
axisTick: {
show: true
},
// 描述单位
axisLabel: {
formatter: "{value}(mL)"
}
}, {
type: 'value',
name: "温度",
// 轴线
axisLine: {
show: true,
symbol: ["none", "arrow"]
},
// 刻度
axisTick: {
show: true
},
// 描述单位
axisLabel: {
formatter: "{value}(℃)"
}
}],
series: [{
type: 'bar',
yAxisIndex: 0
}, {
type: 'line',
yAxisIndex: 1
}]
};
//第四部
myEcharts.setOption(option)
</script>
</body>
</html>
效果:
二、折线
简单的折线
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
var myEcharts = echarts.init(main, null, {
width: "auto",
height: 600
})
//设置数据及格式(配置)
var option = {
xAxis: {
type: 'category',
},
yAxis: {
type: 'value'
},
// stack:堆叠
series: [{
// data: [12, 60, 100, 20, 200],
//
data: [
[20, 120],
[50, 180],
[110, 30]
],
type: "line",
label: {
show: true,
position: [10, -20]
},
// 设置样式
lineStyle: {
color: "green",
type: "dashed",
width: 3
}
}]
};
//第四部
myEcharts.setOption(option)
// 实现响应式
window.onresize = function() {
myEcharts.resize()
}
</script>
</body>
</html>
效果:
2.图形中一些按钮
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* #main {
width: 100%;
height: 600px;
border: 1px solid red;
} */
</style>
</head>
<body>
<div id="main"></div>
<script>
//获取到div
var main = document.getElementById("main")
//初始化图表
//第一种情况:此种情况是已经提前给图表容器设置好大小
//var myEcharts = echarts.init(main)
//第二种:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示:
var myECharts = echarts.init(main, "customed", {
width: "auto",
height: 600
})
//设置数据及格式(配置)
var option = {
//此处的color是全局调色板
color: ["green", "red", "yellow", "blue"],
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [{
data: [120, {
value: 200,
itemStyle: {
color: "red"
}
}, 150, 80, 70, 110, 130],
type: 'bar'
}],
toolbox: {
show: true,
feature: {
//保存为图片
saveAsImage: {
show: true,
type: 'jpg',
name: '下雨量',
title: '保存为图片',
backgroundColor: 'red'
},
//数据视图
dataView: {
show: true,
title: '销量数据',
lang: ['数据视图', '关闭', '刷新'],
textareaColor: 'lightblue',
textareaBorderColor: 'lightblue',
backgroundColor: 'lightblue'
},
magicType: {
show: true,
type: ['line', 'bar'],
title: {
line: '切换为折线图',
bar: '切换为柱状图'
}
},
dataZoom: {
show: true,
title: {
zoom: '区域缩放',
back: '区域缩放还原'
}
},
restore: {
show: true,
title: '还原'
}
}
},
};
//第四步:
myECharts.setOption(option)
//实现响应式容器大小的改变
window.onresize = function() {
myECharts.resize();
};
</script>
</body>
</html>
效果:
案例:动态排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/echarts/dist/echarts.min.js"></script>
<!-- 汉化包 -->
<script src="js/echarts/i18n/langZH.js"></script>
<style>
/* div {
width: 100%;
height: 600px;
} */
</style>
</head>
<body>
<!-- -->
<div id="main"></div>
<script>
var main = document.getElementById("main")
// 初始化图表
// 第一种情况:此种情况是已经提前给图表容器设置好了大小
// var myEcharts = echarts.init(main)
//第二种情况:在未指定图表容器大小时,可以在图表初始化时给容器指定大小,如下所示
var myEcharts = echarts.init(main, null, {
width: "auto",
height: 600
})
//设置数据及格式(配置)
const data = [];
for (let i = 0; i < 6; ++i) {
data.push(Math.round(Math.random() * 200));
}
var option = {
xAxis: {
max: 'dataMax'
},
yAxis: {
type: 'category',
data: ['A', 'B', 'C', 'D', 'E', 'F'],
inverse: true,
animationDuration: 300,
animationDurationUpdate: 300,
max: 5 // only the largest 3 bars will be displayed
},
series: [{
realtimeSort: true,
name: 'X',
type: 'bar',
data: data,
label: {
show: true,
position: 'right',
valueAnimation: true
}
}],
legend: {
show: true
},
animationDuration: 0,
animationDurationUpdate: 3000,
animationEasing: 'linear',
animationEasingUpdate: 'linear'
};
function run() {
for (var i = 0; i < data.length; ++i) {
if (Math.random() > 0.9) {
data[i] += Math.round(Math.random() * 2000);
} else {
data[i] += Math.round(Math.random() * 200);
}
}
myEcharts.setOption({
series: [{
type: 'bar',
data
}]
});
}
setTimeout(function() {
run();
}, 0);
setInterval(function() {
run();
}, 3000);
//第四部
myEcharts.setOption(option)
// 实现响应式
window.onresize = function() {
myEcharts.resize()
}
</script>
</body>
</html>
效果: