Echarts - 可视化统计图

一、基本步骤
- 引入 echarts ( CDN引入 )
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/echarts-en.js"></script> - 准备一个展示图表的盒子
- 初始化echarts实例对象
var muChart = echarts.init(document.getElementById('main')) - 准备配置项
var option = { // coding } - 将配置项设置给Echarts实例对象
myChart.setOption(option)
二、通用配置项
2.1、图表标题
title:{
text:"设置标题",
link:"配置标题点击之后的超链接 直接设置网址链接",
x:"center/left/right/<number>",
y:"center/top/bottom/<number>",
top: 100,
left: 750,
backgroundColor:"",
borderColor:"xxx",
borderWidth:<number>,
padding:<number>,
txetStyle:{
字体大小、粗细、颜色
fontSize: 18,
fontWeight: 'bolder',
color: '#333'
},
2.2、提示
tooltip:{
trigger:"item / axis"
triggerOn:"mouseover / click"
formatter:"字符串模版",
formatter:function(arg){
console.log(arg)
return args.name + '的成绩是' + args.data
}
}
2.3、工具按钮
toolbox:{
feature:{
saveAsImage:{},
dataView:{},
magicType: {
type: ['bar', 'line']
},
dataZoom: {},
restore: {}
}
}
2.4、图例
legend: {
data: ['语文成绩', '数学成绩']
}
三、图表
3.1、柱状图

var xData = ['Bucky', 'Summer', 'Henery', 'Taylor', 'Swift', 'Kety']
var yData = [89, 90, 91, 95, 19, 30]
var yData1 = [50, 70, 81, 65, 99, 40]
var option = {
xAxis:{
type:"category",
data:xDate
},
yAxis:{
type:"value"
},
series:[
{
name:"<数据属于的是什么分类的数据>"
type:"bar",
data:yDate,
markPoint:{
data:[
{
type:"max",
name:"最大值"
},
{
type:"min",
name:"最小值"
}
]
},
markLine:{
data:[
{
type:"average",
name:"平均值"
}
]
},
label:{show:true,rotate:60,position:"inside/outside"},
barWidth:"40%"
},
{
name:"<数据属于的是什么分类的数据>"
type:"bar",
data: ['<在y轴显示的数据>'],
markPoint:{
data:[
{
type:"max",
name:"最大值"
},
{
type:"min",
name:"最小值"
}
]
},
markLine:{
data:[
{
type:"average",
name:"平均值"
}
]
},
label:{show:true,rotate:60,position:"inside/outside"},
barWidth:"40%"
}
]
}
3.2、折线图

var xData = ['Bucky', 'Summer', 'Henery', 'Taylor', 'Swift', 'Kety']
var yData = [89, 90, 91, 95, 19, 30]
var yData1 = [50, 70, 81, 65, 99, 40]
var options = {
xAxis: {
type: "category",
data: xDate,
boundaryGap: false,
},
yAxis: {
type: "value",
scale: true
},
series: [
{
name:"<数据属于的是什么分类的数据>"
type: "line",
markPoint: {
data: [
{ type: "max", data: "最大值" },
{ type: "min", data: "最小值" }
]
},
markLine: {
data: [{ type: "average", data: "平均值" }]
},
markArea: {
data: [
[{ xAxis: '1月' }, { xAxis: '2月' }],
[{ xAxis: '7月' }, { xAxis: '8月' }],
]
},
smooth: true,
lineStyle: {
color: "green",
type: "dashed"
},
areaStyle: {
color: "yellowgreen"
},
label: { show: true, rotate: 10, position: 'outside' },
data: yData,
stack: 'all'
}
,
{
type: "line",
data: yData,
stack: 'all'
}
]
}
3.3、散点图

var splashe = [
{ "gender": "famale", "height": "170", "weight": "180" },
{ "gender": "famale", "height": "172", "weight": "120" },
{ "gender": "famale", "height": "177", "weight": "170" },
{ "gender": "famale", "height": "192", "weight": "85" },
{ "gender": "famale", "height": "182", "weight": "18" },
{ "gender": "famale", "height": "162", "weight": "150" },
]
var axisArray = [];
for (var i = 0; i < splashe.length; i++) {
var height = splashe[i].height;
var weight = splashe[i].weight;
var newArray = [height, weight]
axisArray.push(newArray)
}
var optionss = {
xAxis: {
type: "value",
scale: true,
},
yAxis: {
type: "value",
scale: true
},
series: [
{
type: "effectScatter",
rippleEffect: {
scale: 5
},
showEffectOn: 'render',
data: axisArray,
symbolSize: function (arg) {
var height = arg[0] / 100
var weight = arg[1]
var bmi = weight / (height * height)
if (bmi > 28) {
return 20
}
return 10
},
itemStyle: {
color: function (arg) {
console.log(arg);
var height = arg.data[0] / 100
var weight = arg.data[1]
var bmi = weight / (height * height)
if (bmi > 28) {
return 'greenyellow'
}
return 'pink'
}
}
}]
}
3.4、饼图

var myChart = echarts.init(document.getElementById('main'));
var pieData = [
{ name: "Bucky", value: 1234 },
{ name: "Taylor", value: 1135 },
{ name: "Hacker", value: 1934 },
{ name: "Docker", value: 1634 },
{ name: "Henry", value: 1004 }
]
var option = {
series: [
{
type: "pie",
data: pieData,
label: {
show: true,
formatter: function (arg) {
console.log(arg);
return arg.name + '占据了' + arg.percent + "%"
},
},
roseType: 'radius',
selectedMode: 'multiple',
selectedOffset: 30,
}
]
}
myChart.setOption(option);
3.5、地图
 获取地图的json数据 : 地图API
var scatterData = [
{
value: [104.065735, 30.659462]
}
]
var myChart = echarts.init(document.getElementById('main'));
$.get('./json/china.json', function (res) {
console.log(res);
echarts.registerMap('chinaMap', res);
var option = {
geo: {
type: 'map',
map: 'chinaMap',
roam: true,
label: {
show: true,
},
zoom: 1,
center: [104.065735, 30.659462],
},
series: [
{
data: airData,
geoIndex: 0,
type: 'map'
},
{
data: scatterData,
type: "effectScatter",
showEffectOn: 'render',
coordinateSystem: "geo",
rippeEffect: {
scale: 40,
},
symbolSize: function (arg) {
return 50
},
itemStyle: {
color: function (arg) {
console.log(arg);
return "#23ff79"
}
}
}
],
visualMap: {
min: 0,
max: 300,
inRange: {
color: ['white', 'red']
},
calculable: true,
}
}
myChart.setOption(option);
})
地图通常会根据一些数据的不同显示不同的背景色,所以这里我根据空气质量来设置背景色
var airData = [
{ name: '北京市', value: 39.92 },
{ name: '天津市', value: 39.13 },
{ name: '河北省', value: 31.22 },
{ name: '山西省', value: 66 },
{ name: '内蒙古自治区', value: 147 },
{ name: '辽宁省', value: 113 },
{ name: '吉林省', value: 25.04 },
{ name: '黑龙江省', value: 50 },
{ name: '上海市', value: 114 },
{ name: '江苏省', value: 175 },
{ name: '浙江省', value: 117 },
{ name: '安徽省', value: 92 },
{ name: '福建省', value: 84 },
{ name: '江西省', value: 67 },
{ name: '山东省', value: 84 },
{ name: '河南省', value: 96 },
{ name: '湖北省', value: 273 },
{ name: '湖南省', value: 59 },
{ name: '广东省', value: 99 },
{ name: '广西壮族自治区', value: 39 },
{ name: '海南省', value: 58 },
{ name: '重庆市', value: 61 },
{ name: '四川省', value: 51 },
{ name: '贵州省', value: 29 },
{ name: '云南省', value: 71 },
{ name: '西藏自治区', value: 38 },
{ name: '陕西省', value: 57 },
{ name: '甘肃省', value: 24 },
{ name: '青海省', value: 58 },
{ name: '宁夏回族自治区', value: 52 },
{ name: '新疆维吾尔自治区', value: 54 },
{ name: '台湾省', value: 88 },
{ name: '香港特别行政区', value: 66 },
{ name: '澳门特别行政区', value: 77 },
{ name: '', value: 55 }
]
var scatterData = [
{
value: [104.065735, 30.659462]
},
]
var myChart = echarts.init(document.getElementById('main'));
$.get('./json/china.json', function (res) {
console.log(res);
echarts.registerMap('chinaMap', res);
var option = {
geo: {
type: 'map',
map: 'chinaMap',
roam: true,
label: {
show: true,
},
zoom: 1,
center: [104.065735, 30.659462],
},
series: [
{
data: airData,
geoIndex: 0,
type: 'map'
},
{
data: scatterData,
type: "effectScatter",
showEffectOn: 'render',
coordinateSystem: "geo",
rippeEffect: {
scale: 40,
},
symbolSize: function (arg) {
return 50
},
itemStyle: {
color: function (arg) {
console.log(arg);
return "#23ff79"
}
}
}
],
visualMap: {
min: 0,
max: 300,
inRange: {
color: ['white', 'red']
},
calculable: true,
}
}
myChart.setOption(option);
})
3.6、雷达图

var myChart = echarts.init(document.getElementById('main'));
var dataMax = [
{ name: '易用', max: 100 },
{ name: '功能', max: 100 },
{ name: '拍照', max: 100 },
{ name: '续航', max: 100 },
{ name: '价格', max: 100 }
]
var option = {
radar: {
indicator: dataMax,
shape: 'circle'
},
series: [
{
type: 'radar',
label: {
show: true,
},
areaStyle: {},
data: [
{
name: "phone1",
value: [60, 50, 85, 88, 80]
},
{
name: "phone2",
value: [70, 80, 70, 85, 66]
},
]
},
],
}
myChart.setOption(option);
3.7、仪表盘

var myChart = echarts.init(document.getElementById("main"))
var option = {
series: [{
name: 'Pressure',
type: 'gauge',
data: [{
value: 90,
name: 'SCORE',
itemStyle: {
color: 'pink'
}
}, {
value: 98,
name: 'SCORE',
itemStyle: {
color: 'red'
}
}],
min: 50,
max: 200
}]
};
myChart.setOption(option)
图表小结
type = "xxxx"
- bar 柱状图
- line 折线图
- pie 饼图
- scatter/effectScatter 散点图 / 带有涟漪动画的散点图
- map 地图
- radar 雷达
- gauge 仪表盘
使用场景
- 柱状图 : 分类数据 呈现的是每一个分类中有多少
- 折线图 : 分析数据随时间的变化趋势
- 散点图 : 不同维度数据之间的相关性、与地图结合使用涟漪动画
- 饼图 : 不同分类数据的占比情况
- 地图 : 分析不同地理位置上数据的差异
- 雷达图 : 分析多个维度的数据与标准数据的对比情况
- 仪表盘 : 某个指标的进度或实际情况
|