1.ECharts可以干什么
实现数据可视化即图标
2.使用ECharts
1.引入cdn地址
https://www.bootcdn.cn/echarts/
选择相应的cdn在html页面中进行引入
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
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>
<!-- 1.引入echarts -->
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
</head>
<style>
/* 3.设置画布的宽高 */
#box {
width: 600px;
height: 600px;
}
</style>
<body>
<!-- 2.给可视化图形准备一个画布 -->
<div id="box"></div>
</body>
<script>
// 4.初始化echarts,并说明要把图画到id为box的画布上
let ec = echarts.init(document.getElementById('box'))
// 5.配置项(写一些图形的数据和图形的类型以及各种属性)
let option = {
// x轴
xAxis: {
type: "category",
data: ['刀', '枪', '手雷', '坦克', '飞机']
},
// y轴内容
yAxis: {
type: "value",
},
// 系列列表
series: [{
name: "7月份销量",
type: "bar", //图形类型为柱状图
// type: "line", //图形类型为折线图
data: [341, 545, 231, 434, 1000], //该图形类型中的数据
},
{
name: "6月份销量",
type: "bar", //图形类型为柱状图
// type: "line", //图形类型为折线图
data: [241, 535, 211, 134, 1300], //该图形类型中的数据
}
]
}
// 6.最后把配置项设置给echarts
ec.setOption(option)
</script>
</html>
运行结果
3.柱状图常用属性''
<!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="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
<style>
#box{
width:600px;
height:400px;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
let ec = echarts.init(document.getElementById('box'));
/*
川川~ 未来半年工资情况
[六月,七月,八月,九月,十月,十一月,十二月]
[1200,3000,5000,1500,6000,6500,5000]
*/
let option = {
xAxis:{
data:['六月','七月','八月','九月','十月','十一月','十二月'],
type:"category"
},
yAxis:{
type:"value"
},
series:[
{
name:"下半年工资情况",
type:'bar',
data:[1200,3000,5000,1500,6000,6500,5000],
/*标注点*/
markPoint:{
data:[
{
name:"最大值",
type:"max"
},
{
name:"最小值",
type:"min"
}
]
},
/*标注线*/
markLine:{
data:[
{
name:"平均值",
type:"average"
}
]
},
/*让图表中显示数值*/
label:{
show:true,//true表示显示
position:'top',//文字显示位置
rotate:60//文字旋转60度
},
/*设置宽度*/
//barWidth:"30%"
}
]
}
ec.setOption(option);
</script>
</body>
</html>
实现x轴显示数据,y轴显示字段
<!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="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
<style>
#box {
width: 600px;
height: 400px;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
let ec = echarts.init(document.getElementById('box'));
/*
川川~ 未来半年工资情况
[六月,七月,八月,九月,十月,十一月,十二月]
[1200,3000,5000,1500,6000,6500,5000]
*/
let option = {
// 1.-------让y轴显示字段-------------
yAxis: {
data: ['六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
type: "category"
},
// 2.--------让x轴显示数值--------------
xAxis: {
type: "value"
},
series: [{
name: "下半年工资情况",
type: 'bar',
data: [1200, 3000, 5000, -1500, 6000, 6500, 5000],
/*标注点*/
markPoint: {
data: [{
name: "最大值",
type: "max"
},
{
name: "最小值",
type: "min"
}
]
},
/*标注线*/
markLine: {
data: [{
name: "平均值",
type: "average"
}]
},
/*让图表中显示数值*/
label: {
show: true, //true表示显示
position: 'right', //文字显示位置
rotate: 20 //文字旋转60度
},
/*设置宽度*/
//barWidth:"30%"
}]
}
ec.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>通用属性</title>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script>
<style>
#box{
width:600px;
height:400px;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
let ec = echarts.init(document.getElementById('box'));
/*
川川~ 未来半年工资情况
[六月,七月,八月,九月,十月,十一月,十二月]
[1200,3000,5000,1500,6000,6500,5000]
*/
let option = {
xAxis:{
data:['六月','七月','八月','九月','十月','十一月','十二月'],
type:"category"
},
yAxis:{
type:"value"
},
//通用属性
title:{
text:"下半年工资",
link:"http://www.baidu.com",
textStyle:{
color:"orange"
},
backgroundColor:"pink"
},
//鼠标滑过显示的效果
tooltip:{
trigger:"axis",
//formatter:"{a}<br>{b}:<span style='color:orange'>{c}</span>"
formatter:(v)=>{
//4000垃圾 红色 绿色
if (v[0]['value'] <= 4000) {
return v[0]['seriesName']+"<br>"+v[0]['name']+":<span style='color:red'>"+v[0]['value']+"</span>";
} else {
return v[0]['seriesName']+"<br>"+v[0]['name']+":<span style='color:green'>"+v[0]['value']+"</span>";
}
}
},
/*toolbox 工具栏*/
toolbox:{
feature:{
saveAsImage:{}, //另存为图片
dataView:{}, //数据视图
restore:{}, //重置按钮,
dataZoom:{}, //区域缩放
magicType:{ //切换表现形式
type:["line","bar"]
}
}
},
/*legend 图例组件*/
legend:{
data:[{
name:"21年工资情况", //此处的name必须跟下面的name对应
icon:"diamond"
},{
name:"20年工资情况"
}]
},
series:[
{
name:"21年工资情况",
type:'bar',
data:[1200,3000,5000,1500,6000,6500,5000],
markLine:{
data:[
{
name:"平均值",
type:"average"
}
]
}
},
{
name:"20年工资情况",
type:'bar',
data:[2200,3200,1500,1400,2000,1500,4000],
},
{
name:"19年工资情况",
type:'bar',
data:[3200,2200,500,2500,7800,4500,5800],
}
]
}
ec.setOption(option);
</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>折线图</title> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script> <style> #box{ width:600px; height:400px; } </style> </head> <body> <div id="box"></div> <script> let ec = echarts.init(document.getElementById('box')); /* 川川~ 未来半年工资情况 [六月,七月,八月,九月,十月,十一月,十二月] [1200,3000,5000,1500,6000,6500,5000] */ let option = { xAxis:{ data:['六月','七月','八月','九月','十月','十一月','十二月'], type:"category", boundaryGap:false }, yAxis:{ type:"value", //scale:true //让起点不为0 , 适用于数据非常相近 ,又想观察细节的变化 }, series:[ { name:"21年工资情况", type:'line', data:[1130,5120,2190,4200,3210,2260,1080], areaStyle:{ color:'lightblue' }, smooth:true, //堆叠图 stack:"aa" }, { name:"20年工资情况", type:'line', stack:"aa",// 堆叠图 data:[3130,3120,4190,5200,7210,1260,3080], markPoint:{ data:[ { name:"最大值", type:"max" }, { name:"最小值", type:"min" } ] }, markLine:{ data:[ { name:"平均值", type:"average" } ] }, markArea:{ data:[ [{ xAxis:"八月" },{ xAxis:"十一月" }], ] }, //线条控制 平滑曲线 smooth:true, lineStyle:{ color:'orange', type:"dotted" }, areaStyle:{ color:'gold' }, itemStyle:{ color:'red' } } ] } ec.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>散点图</title> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script> <style> #box{ width:600px; height:400px; } </style> </head> <body> <div id="box"></div> <script> let ec = echarts.init(document.getElementById('box')); var data = [{"gender": "female", "height": 161.2, "weight": 51.6 }, {"gender": "female", "height": 167.5, "weight": 59 }, {"gender": "female", "height": 159.5, "weight": 49.2 }, {"gender": "female", "height": 157, "weight": 63 }, {"gender": "female", "height": 155.8, "weight": 53.6 }, {"gender": "female", "height": 170, "weight": 59 }, {"gender": "female", "height": 159.1, "weight": 47.6 }, {"gender": "female", "height": 166, "weight": 69.8 }, {"gender": "female", "height": 176.2, "weight": 66.8 }, {"gender": "female", "height": 160.2, "weight": 75.2 }, {"gender": "female", "height": 172.5, "weight": 55.2 }, {"gender": "female", "height": 170.9, "weight": 54.2 }, {"gender": "female", "height": 172.9, "weight": 62.5 }, {"gender": "female", "height": 153.4, "weight": 42 }, {"gender": "female", "height": 160, "weight": 50 }, {"gender": "female", "height": 147.2, "weight": 49.8 }, {"gender": "female", "height": 168.2, "weight": 49.2 }, {"gender": "female", "height": 175, "weight": 73.2 }, {"gender": "female", "height": 157, "weight": 47.8 }, {"gender": "female", "height": 167.6, "weight": 68.8 }, {"gender": "female", "height": 159.5, "weight": 50.6 }, {"gender": "female", "height": 175, "weight": 82.5 }, {"gender": "female", "height": 166.8, "weight": 57.2 }, {"gender": "female", "height": 176.5, "weight": 87.8 }, {"gender": "female", "height": 170.2, "weight": 72.8 }, {"gender": "female", "height": 174, "weight": 54.5 }, {"gender": "female", "height": 173, "weight": 59.8 }, {"gender": "female", "height": 179.9, "weight": 67.3 }, {"gender": "female", "height": 170.5, "weight": 67.8 }, {"gender": "female", "height": 160, "weight": 47 }] let dataArr = []; for (let i = 0 ; i < data.length; i++) { let narr = [data[i]['height'],data[i]['weight']]; // [161.2,51.6] dataArr.push(narr); } let option = { xAxis:{ type:'value', scale:true }, yAxis:{ type:'value', scale:true }, series:[ { type:"effectScatter", rippleEffect:{ scale:10 }, showEffectOn:"emphasis", data:dataArr, symbolSize:(v)=>{ //BMI=体重÷身高2。(体重单位:千克;身高单位:米。) let bmi = (v[1]*10000)/(v[0]*v[0]); if (bmi > 25) { return 30 } else if (bmi < 20) { return 10 } return 20 }, itemStyle:{ color:(v)=>{ //BMI=体重÷身高2。(体重单位:千克;身高单位:米。) let bmi = (v.data[1]*10000)/(v.data[0]*v.data[0]); if (bmi > 25) { return 'red' } else if (bmi < 20) { return 'yellow' } return "green" } } } ] } ec.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>直角坐标系通用属性</title> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script> <style> #box{ width:600px; height:400px; border:1px solid red; } </style> </head> <body> <div id="box"></div> <script> let ec = echarts.init(document.getElementById('box')); let option = { //配制直角坐标系 grid:{ show:true, borderWidth:10, backgroundColor:'pink', shadowColor:"grey", shadowBlur:10 }, //配制 xAxis:{ //type data scale type:"category", data:["枪","哇哇","假牙","杯子","假发"] }, yAxis:{ type:"value" }, //dataZoom dataZoom:[ { type:"inside" //inside 通过滚轮缩放 }, { type:"slider", //slider 通过滑块进行缩放 xAxisIndex:0 }, { type:"slider", //slider 通过滑块进行缩放 yAxisIndex:0 } ], //系列列表 --- 描绘图片具体是什么样子的 series:[ { name:"7月销量", type:"line", //bar 柱状图 data:[341,678,123,98,1023] }, { name:"6月销量", type:"bar", //bar 柱状图 data:[241,578,523,198,23] } ] } ec.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>饼状图</title> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script> <style> #box{ width:600px; height:400px; } </style> </head> <body> <div id="box"></div> <script> //统计 川川 一年内 购买商品的类别占比 //军火 1000 奶茶 2300 吃饭 4500 生活 6000 情趣 10000 let ec = echarts.init(document.getElementById('box')); // 每一项必须是 name 和 value let bdata = [ {name:"军火",value:1000}, {name:"奶茶",value:2300}, {name:"零食",value:4500}, {name:"生活",value:6000}, {name:"情趣",value:10000}, ] let option = { series:[ { name:"购买类别", type:"pie", data:bdata, label:{ show:true, formatter:(r)=>{ console.log(r) return r['name']+":"+r['percent']+'%' } }, //radius:['50%','80%'] //[内圈半径,外圈半径] 可以制作圆环 roseType:"radius" //南丁格尔图 } ] } ec.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>雷达图</title> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.js"></script> <script src="./vintage.js"></script> <style> #box{ width:600px; height:400px; } </style> </head> <body> <div id="box"></div> <script> let ec = echarts.init(document.getElementById('box'),"vintage"); //制定雷达图的配置项和每项数据的最大值 let max = [ {name:"输出",max:"100"}, {name:"KDA",max:"100"}, {name:"发育",max:"100"}, {name:"团战",max:"100"}, {name:"生存",max:"100"}, ] //真正的数据 let dd = [ {name:"海峰",value:[90,85,78,56,34]}, {name:"光哥",value:[50,95,88,16,94]}, ] let option = { radar:{ indicator:max, shape:"circle" }, series:[ { type:"radar", name:"个人素养", data:dd, label:{ show:true }, areaStyle:{} } ] } ec.setOption(option); </script> </body> </html>