1.定义
echarts是基于javascript的图表插件(canvas)百度开发捐赠给apache基金会开源
2.echarts第一个案例:hellworld
引入js
<script src="./js/echarts.min.js"></script>
设置容器 宽高
<div id="app">
</div>
css样式
#app{
width: 800px;
height: 600px
}
初始化
var echart = echarts.init(document.getElementById('app'));
定义选项
var option = {
title:{text:'小吴的睡眠时间'}, // 标题文本
legend:{data:['睡眠时长','作业耗时','成绩']}, // 图例
tooltip:{}, // 鼠标提示
yAxis:{}, // y轴线
xAxis:{data:['20日','21日','22日','23日','24日','25日','26日']},// x轴线
series:[ // 系列数据
{name:'睡眠时长',type:'bar',data:[8,5,4,7,3,12,14]}, // 数据
{name:'作业耗时',type:'line',data:[1,2,4,3,5,1,0],smooth:true},
{
name:'成绩',
type:'pie',
data:[
{name:'html',value:90},
{name:'js',value:80},
{name:'nodejs',value:60},
],
radius:[100,60], //半径
left:0, //左偏移
top:-200, //顶部偏移
}
]
}
设置选项
echart.setOption(option)
3.option选项
属性名 | 意义 |
---|---|
title | 标题 |
tooltip | 鼠标经过提示 |
xAxis | x轴 |
yAxis | y轴 |
series | 系列数据 |
option里面还有很多属性可以在官方网站查看 echart
4.颜色改变
1.主题
默认的主题有两种:light dark
也可以自己在官方网站中设置自定义样式
// 主题使用
var echart = echarts.init(document.getElementById('app'),'light);
2.color:[“#f30”] 调色盘
3.data:[15,{value:20,itemStyle:{}}]
4.itemStyle
itemStyle:{
normal:{color:'#12f8e9'}, //正常状态
emphasis:{color:'#00ffb3'}, // 强调状态
}
5.bar柱状图
柱状图的type属性是bar
{name:'睡眠时长',type:'bar',data:[8,5,4,7,3,12,14]}, // 数据
6.line折线图
折线图的type属性是line
{name:'作业耗时',type:'line',data:[1,2,4,3,5,1,0],smooth:true},
7.pie饼形图
饼形图的type属性是pie
{
name:'成绩',
type:'pie',
data:[
{name:'html',value:90},
{name:'js',value:80},
{name:'nodejs',value:60},
],
radius:[100,60], //半径
left:0, //左偏移
top:-200, //顶部偏移
}
8.stack堆叠
var option = {
color:['#1cffce',' #2ef5ff'],
title:{text:'郑州人口留存'},
legend:{data:['新增','流失']},
yAxis:{data:['2019','2020','2021']},
xAxis:{},
tooltip:{},
series:[
{name:'新增',data:[30,50,10],type:'bar',stack:true,
label:{show:true,position:'insideRight',formatter:'{a}:{c}'},
},
{name:'流失',data:[30,20,100],type:'bar',stack:true,
label:{show:true,position:'insideRight',formatter:'{a}:{c}'},
},
]
}
9.一图多表
var option = {
color:['#1cffce',' #2ef5ff'],
title:{text:'使用分布'},
legend:{data:['手机使用时长','编码时间']},
grid: [
{ left: '7%', top: '7%',width:'50%',height: '38%' },
{ left: '7%', bottom: '7%',width:'50%',height: '38%' },
],
yAxis:[
{gridIndex:0,min:0,max:10},
{gridIndex:1,min:0,max:10},
],
xAxis:[
{data:['周一','周二','周三','周四','周五','周六','周日',],
gridIndex:0
},
{data:['周一','周二','周三','周四','周五','周六','周日',],
gridIndex:1
},
],
tooltip:{
},
series:[
{name:'手机使用时长',data:[3,2,4,3,2,5,10],type:'bar',
xAxisIndex:0,
yAxisIndex:0,
type:'bar',
itemStyle:{
normal:{color:'#12f8e9'}, //正常状态
emphasis:{color:'#00ffb3'}, // 强调状态
}
},
{name:'编码时间',data:[10,5,6,4,7,4,1],type:'bar',
xAxisIndex:0,
yAxisIndex:0,
type:'bar',
itemStyle:{
normal:{color:'#00ffb3'}, //正常状态
emphasis:{color:'#12f8e9'}, // 强调状态
}
},
{name:'编码时间',data:[10,5,6,4,7,4,1],type:'bar',
xAxisIndex:1,
yAxisIndex:1,
type:'bar',
itemStyle:{
normal:{color:'#00ffb3'}, //正常状态
emphasis:{color:'#12f8e9'}, // 强调状态
}
},
{name:'手机使用时长',data:[3,2,4,3,2,5,10],type:'bar',
xAxisIndex:1,
yAxisIndex:1,
type:'bar',
itemStyle:{
normal:{color:'#12f8e9'}, //正常状态
emphasis:{color:'#00ffb3'}, // 强调状态
}
},
]
}
10.label
var option = {
color:['#1cffce',' #5555ff'],
title:{text:'网站访问来源',left:'center'},
legend:{data:['百度','其他'],left:'right'},
tooltip:{},
series:[
{type:'pie',name:'访问来源',
radius:[200,130],
data:[
{name:'百度',value:1700,
label:{
show:true,
position:'center',
formatter:'{big|{d}}{small|%}\n{text|{b}}',
rich:{
big:{
color:'#f70',
fontWeight:700,
fontSize:48,
},
small:{
color:'#f70'
},
text:{
color:"#00aaff",
fontSize:20
}
}
}
},
{name:'其他',value:400,label:{show:false}}
]
}
]
}
11.动态更新
var echart = echarts.init(document.getElementById('container'));
var list = data.data.feiyan.beijingTrends.sort((a,b)=>a.day-b.day);
var option = {
title:{text:'2020北京新冠肺炎趋势'},
legend:{data:['累计确诊']},
xAxis:{data:list.slice(0,10).map(item=>String(item.day).slice(-4))},
yAxis:{},
series:[
{name:'累计确诊',type:'bar',data:list.slice(0,10).map(item=>item.rest_sure_cnt)}
]
};
echart.setOption(option)
function auto(){
var first = list.shift();
list.push(first);
option.xAxis.data = list.slice(0,10).map(item=>String(item.day).slice(-4));
option.series[0].data = list.slice(0,10).map(item=>item.rest_sure_cnt);
echart.setOption(option);
}
var id = null;
id = setInterval(auto,1000);
var box = document.getElementById('container');
box.addEventListener('mouseover',function(){
clearInterval(id)
})
box.addEventListener('mouseout',function(){
id = setInterval(auto,1000);
})
12.事件监听
echart.on(事件名,function(e){})
echart.off()
13.事件触发
echart.dispatchAction({})
type:"showTip"
seriesIndex:系列下标
dataIndex:数据下标
14.动画
var echart = echarts.init(document.getElementById('container'));
var list = data.data.feiyan.beijingTrends.sort((a,b)=>a.day-b.day);
var option = {
title:{text:'2020北京新冠肺炎趋势'},
legend:{data:['累计确诊']},
toolbox: {
show: true, // 显示工具箱
feature: { // 特性
dataZoom: { // 缩放x轴线
yAxisIndex: 'none'
},
dataView: { readOnly: false }, // 编辑数据
magicType: { type: ['line', 'bar'] }, // 魔法类型,线与柱状互转
restore: {}, // 重置
saveAsImage: {} // 保存图片
}
},
xAxis:{data:list.slice(0,10).map(item=>String(item.day).slice(-4))},
yAxis:{},
series:[
{name:'累计确诊',type:'bar',data:list.slice(0,10).map(item=>item.rest_sure_cnt)}
],
animationEasing:'bounceInOut',
animationDelay:function(idx){
return idx *100;
},
animationDuration:function(idx){
return idx*500
}
};
echart.setOption(option)
function auto(){
var first = list.shift();
list.push(first);
option.xAxis.data = list.slice(0,10).map(item=>String(item.day).slice(-4));
option.series[0].data = list.slice(0,10).map(item=>item.rest_sure_cnt);
echart.setOption(option);
}
setTimeout(()=>{
id = setInterval(auto,1000);
},7000)
animationEasing:过渡动画
animationDelay:function(idx){return idx*100} //动画延迟
animationDuration:function(idx){return idx*100} //动画时长
15.toolbox工具箱
toolbox: {
show: true, //显示工具箱
feature: { //特性
dataZoom: { //缩放x轴线
yAxisIndex: 'none'
},
dataView: { readOnly: false }, //编辑数据
magicType: { type: ['line', 'bar'] }, //魔法类型,线与柱状互转
restore: {}, //重置
saveAsImage: {} //保存图片
}
},
16.地图
// 初始化
var echart = echarts.init(document.querySelector("#container"));
// 选项
var option = {
// 标题
title:{text:"中国地图"},
tooltip:{},
// 系统数据
series:[{
// 地图类型
type:"map",
// 数据
data:[
{name:"河南",value:"200",en:"henan"},
{name:"湖南",value:"180",en:"hunan"},
]
}]
};
function getMap(obj={en:"china"}){
// h5的内置api fetch 自学内容(ES6新增ajax内置方法)
fetch(`./js/map/json/province/${obj.en}.json`)
.then(res=>res.json())//把获取的数据转换为json res.text()转换为文本
.then(res=>{
// 注册地图
echarts.registerMap(obj.en,res);
// 设置地图的类型
option.series[0].mapType = obj.en;
// 更新选项
echart.setOption(option);
})
.catch(err=>console.error(err))
}
getMap();