1. echarts概述
echarts是一款基于JavaScript的数据可视化库,它可以通过简单的配置实现饼图、柱状图、折线图等各种图表的展示。此外,echarts还支持大数据量的可视化展示和动态更新,具有很强的交互能力,可以轻松地与各种前端框架进行整合,如vue、react等。
2. echarts的安装
2.1 通过CDN引入
可以在html中引入如下代码,其中version表示要使用的echarts版本号:
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/version/echarts.min.js"></script>
例如:
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.1/echarts.min.js"></script>
2.2 通过npm安装
在终端执行如下命令即可进行安装:
npm install echarts --save
3. echarts的使用
3.1 创建echarts实例
在html中创建一个DOM容器,然后在JavaScript中,通过如下代码创建echarts实例:
var myChart = echarts.init(document.getElementById('chartContainer'));
其中,'chartContainer'为html中定义的DOM容器的id
3.2 设置echarts基础配置项
利用echarts提供的option配置项来设置图表的基本属性,例如设置图表的标题、轴、系列、鼠标交互等。下面是一个简单的示例:
// 设置图表的基础配置项
myChart.setOption({
title: {
text: '某商场销售数据',
subtext: '纯属虚构'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
},
yAxis: {
type: 'value'
},
series: [{
name: '销量',
type: 'line',
data: [120, 132, 101, 134, 90, 230, 210]
}]
});
3.3 设置图表的样式
在上述代码的基础上,我们可以通过echarts提供的style配置项来针对某些特定的元素进行样式的修改,例如针对x轴、y轴、图例、系列进行样式的修改,我们可以使用如下设置:
// 针对x轴进行样式设置
xAxis: {
axisLine: {
lineStyle: {
color: '#999999',
width: 1
}
},
axisTick: {
show: false
},
axisLabel: {
textStyle: {
color: '#333333'
}
},
splitLine: {
show: false
},
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
},
// 针对y轴进行样式设置
yAxis: {
axisLine: {
lineStyle: {
color: '#999999',
width: 1
}
},
axisTick: {
show: false
},
axisLabel: {
textStyle: {
color: '#333333'
}
},
splitLine: {
show: false
}
},
// 针对图例进行样式设置
legend: {
data: ['销量'],
textStyle: {
color: '#666666'
}
},
// 针对系列进行样式设置
series: [{
name: '销量',
type: 'line',
data: [120, 132, 101, 134, 90, 230, 210],
itemStyle: {
normal: {
lineStyle: {
color: '#007aff'
}
}
}
}]
3.4 地图类型的特殊设置
如果我们需要展示地图类型的图表,那么我们需要在基本配置中指定map属性以及指定geo,visualMap的属性。还需要对每个省份设置不同的颜色,下面是详细的配置:
// 设置地图类型的图表配置项
myChart.setOption({
title: {
text: '全国疫情图'
},
tooltip: {
trigger: 'item'
},
visualMap: {
type: 'piecewise',
pieces: [
{ min: 10000 },
{ min: 1000, max: 9999 },
{ min: 500, max: 999 },
{ min: 100, max: 499 },
{ min: 10, max: 99 },
{ min: 1, max: 9 },
{ value: 0, label: '0确诊', color: '#F0FFF0' }],
inRange: {
color: ['#FFECEC', '#FFA0A0', '#FF695E', '#C80000','#8B0000','#7A0000','#FFFFFF']
},
align: 'auto',
bottom: 50,
left: 50
},
series: [{
name: '疫情数据',
type: 'map',
mapType: 'china',
geo: {
roam: false,
map: 'china',
scaleLimit: {
min: 1,
max: 2
},
label: {
show: true
},
emphasis: {
label: {
show: true
}
}
},
itemStyle: {
normal: {
borderColor: '#333333',
borderWidth: 0.5,
areaColor: '#F0FFF0'
}
},
label: {
show: true
},
data: [{ name: '北京', value: Math.round(Math.random() * 1000) },
{ name: '天津', value: Math.round(Math.random() * 1000) },
{ name: '上海', value: Math.round(Math.random() * 1000) },
{ name: '重庆', value: Math.round(Math.random() * 1000) },
{ name: '河北', value: Math.round(Math.random() * 1000) },
{ name: '河南', value: Math.round(Math.random() * 1000) },
{ name: '云南', value: Math.round(Math.random() * 1000) },
{ name: '辽宁', value: Math.round(Math.random() * 1000) },
{ name: '黑龙江', value: Math.round(Math.random() * 1000) },
{ name: '湖南', value: Math.round(Math.random() * 1000) },
{ name: '安徽', value: Math.round(Math.random() * 1000) },
{ name: '山东', value: Math.round(Math.random() * 1000) },
{ name: '新疆', value: Math.round(Math.random() * 1000) },
{ name: '江苏', value: Math.round(Math.random() * 1000) },
{ name: '浙江', value: Math.round(Math.random() * 1000) },
{ name: '江西', value: Math.round(Math.random() * 1000) },
{ name: '湖北', value: Math.round(Math.random() * 1000) },
{ name: '广西', value: Math.round(Math.random() * 1000) },
{ name: '甘肃', value: Math.round(Math.random() * 1000) },
{ name: '山西', value: Math.round(Math.random() * 1000) },
{ name: '内蒙古', value: Math.round(Math.random() * 1000) },
{ name: '陕西', value: Math.round(Math.random() * 1000) },
{ name: '吉林', value: Math.round(Math.random() * 1000) },
{ name: '福建', value: Math.round(Math.random() * 1000) },
{ name: '贵州', value: Math.round(Math.random() * 1000) },
{ name: '广东', value: Math.round(Math.random() * 1000) },
{ name: '青海', value: Math.round(Math.random() * 1000) },
{ name: '西藏', value: Math.round(Math.random() * 1000) },
{ name: '四川', value: Math.round(Math.random() * 1000) },
{ name: '宁夏', value: Math.round(Math.random() * 1000) },
{ name: '海南', value: Math.round(Math.random() * 1000) },
{ name: '台湾', value: Math.round(Math.random() * 1000) },
{ name: '香港', value: Math.round(Math.random() * 1000) },
{ name: '澳门', value: Math.round(Math.random() * 1000) }]
}]
})
4. echarts的交互功能
echarts可以与鼠标、键盘等事件进行交互,并且可以通过触发相应的事件进行响应,例如鼠标移动、鼠标点击、键盘按键等事件,同时,也可以通过设置echarts中的toolbox和dataZoom等工具来实现一些常用的交互功能。
4.1 鼠标移动事件
我们可以针对echarts中的series部分进行鼠标移动事件的响应。例如,在某个系列的item上移动时,在页面中显示tooltip,我们可以通过设置相应的配置项来实现:
// 设置鼠标移动事件响应函数
myChart.on('mouseover', function(params){
myChart.dispatchAction({
type: 'showTip',
seriesIndex: params.seriesIndex,
dataIndex: params.dataIndex,
position: params.event.event.currentTarget.getBoundingClientRect().top + "px"
});
});
myChart.on('mouseout', function(params){
myChart.dispatchAction({
type: 'hideTip',
seriesIndex: params.seriesIndex,
dataIndex: params.dataIndex
});
});
4.2 鼠标点击事件
我们可以通过针对echarts中的series部分进行鼠标点击事件的响应,在选中某一项时执行相应的操作,例如展示一个新的页面、弹出一个框等。以下是一个简单的示例:
// 设置鼠标点击事件响应函数
myChart.on('click', function(params){
if(params.componentType === 'series'){
alert('点击了'+params.seriesName+'系列的'+params.name+'数据项');
}
});
4.3 滚轮缩放事件
echarts支持通过滚轮进行图表的缩放,我们可以通过设置相应的属性来实现该功能:
// 设置鼠标滚轮缩放事件
myChart.on('mousewheel', function(params){
var zoom = myChart.getOption().dataZoom[0];
var arr = [zoom.startValue, zoom.endValue];
myChart.dispatchAction({
type: 'dataZoom',
startValue: arr[0] - (arr[1] - arr[0]) * temperature * params.wheelDelta / 120,
endValue: arr[1] + (arr[1] - arr[0]) * temperature * params.wheelDelta / 120
});
});
4.4 工具箱
echarts提供了toolbox工具箱来方便地进行一些操作,例如全屏、导出、刷新等。可以通过设置工具项的visible属性,来控制是否显示相应的工具,例如下面的示例中,我们只显示全屏和导出两个工具:
// 设置toolbox工具箱
toolbox: {
show: true,
itemSize: 14,
feature: {
dataZoom: {
show: false
},
restore: {
show: true
},
dataView: {
show: false
},
magicType: {
show: false
},
brush: {
show: false
},
saveAsImage: {
show: true
},
fullscreen: {
show: true
}
}
}
4.5 数据区域缩放
数据区域缩放是在图表上选定一段区域,然后通过鼠标滚轮或者拖拽来进行数据的缩放。可以通过设置dataZoom属性,来实现数据的缩放功能,下面是详细的配置:
// 设置数据区域缩放
dataZoom: [{
type: 'inside',
show: true,
start: 0,
end: 100
}, {
type: 'slider',
filterMode: 'none',
orient: 'horizontal',
show: true,
top: 'bottom',
height: 20,
start: 0,
end: 100
}]
5. echarts的常见问题
5.1 交互效果不够灵敏
如果出现交互效果不够灵敏的情况,可以通过设置echarts的取样率,来优化交互效果:
// 设置取样率
myChart.setOption({
series: {
sampling: 'average'
}
});
5.2 图表显示不全
如果出现图表显示不全的情况,有可能是因为echarts的自适应性,可以调整容器的大小或者调整echarts的坐标轴的range:
// 调整容器大小
document.getElementById('chartContainer').style.height = window.innerHeight+'px';
// 调整坐标轴的range
myChart.setOption({
xAxis: {
min: 'dataMin',
max: 'dataMax'
}
});
5.3 数据量过大导致加载时间过长
如果出现数据量过大导致加载时间过长的情况,可以通过使用echarts的数据缩放功能或者分时渲染的方式来展示数据:
// 数据缩放功能
dataZoom: [{
type: 'slider',
show: true,
xAxisIndex: [0],
start: 0,
end: 100,
showDetail: false
}],
// 分时渲染的方式
animation: false,
progressive: true,
progressiveThreshold: 1000
6. 总结
本文介绍了echarts的安装方式、基础配置项和样式设置以及常见的交互功能,同时介绍了一些使用echarts过程