echarts實(shí)現(xiàn)地圖定時(shí)切換散點(diǎn)與多圖表級(jí)聯(lián)聯(lián)動(dòng)詳解
1. 摘要
最近做項(xiàng)目遇到個(gè)統(tǒng)計(jì)相關(guān)需求,一個(gè)頁(yè)面中大概四個(gè)或更多圖形統(tǒng)計(jì),百度地圖、餅圖、柱狀圖、線型圖。百度地圖上顯示所有店面在全國(guó)各地大概位置,目前暫定每省一個(gè),在地圖上顯示散點(diǎn)。如默認(rèn)顯示鄭州散點(diǎn)閃動(dòng),其他圖形顯示鄭州相關(guān)數(shù)據(jù);5秒切換下一個(gè)區(qū)域點(diǎn),其他的圖表數(shù)據(jù)對(duì)應(yīng)改變。先上個(gè)圖,各位有需要的可以再接著往下

2. 引入ECharts以及地圖相關(guān)json
ECharts 3 開(kāi)始不再?gòu)?qiáng)制使用 AMD 的方式按需引入,代碼里也不再內(nèi)置 AMD 加載器。因此引入方式簡(jiǎn)單了很多,只需要像普通的 JavaScript 庫(kù)一樣用 script 標(biāo)簽引入。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- 引入 ECharts 文件 --> <script src="echarts/jquery-1.11.2.min.js"></script> <script src="echarts/echarts.min.js"></script> <script src="echarts/china.js"></script> </head> </html>
3. 界面布局
一個(gè)頁(yè)面中布局多個(gè)圖表有幾個(gè)形式可以參考處理。
第一種:在網(wǎng)頁(yè)創(chuàng)建多個(gè)div用定位的方式,多個(gè)畫(huà)布。此方法聲明多個(gè)echarts對(duì)象,不再過(guò)多介紹,除非特別個(gè)性需求,不推薦使用。
第二種:一個(gè)div一個(gè)畫(huà)布,一個(gè)option,多個(gè)series,調(diào)整圖形x/y的百分百來(lái)定位圖形顯示到界面上的位置。本文用這個(gè)方法。
第三種:與第二種基本一樣,最大的不同是每個(gè)圖標(biāo)上都可以有一個(gè)標(biāo)題,多個(gè)optioins;也是多個(gè)畫(huà)布,但推薦這種。網(wǎng)址參考:http://gallery.echartsjs.com/editor.html?c=xBkXgRwejM
options = [
// 第一個(gè)graph
{
backgroundColor:'#FFFFFF',
title: {
text: 'Sales Revenue of CAN-LAX 2016-2017',
textStyle:{
fontSize:14
}
},
tooltip: { // 提示框組件
trigger: 'axis',
axisPointer: { // 坐標(biāo)軸指示器,坐標(biāo)軸觸發(fā)有效
type: 'shadow' // 默認(rèn)為直線,可選為:'line' | 'shadow'
}
},
legend: {
data: ['2016', '2017','Growing Rate'],
top:'18'
},
grid: {
left: '3%',
right: '5%',
bottom: '3%',
containLabel: true,
show: false // 網(wǎng)格邊框是否顯示,上和右邊框
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false}, // 數(shù)據(jù)試圖是否在控件中顯示
//magicType: {show: true, type: ['stack', 'tiled']},
//restore: {show: true},
saveAsImage: {show: true}
}
},
xAxis: {
type: 'category',
boundaryGap: true, // 坐標(biāo)軸兩邊留白
splitLine: { // 網(wǎng)格線 x軸對(duì)應(yīng)的是否顯示
show: false
},
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
},
yAxis: [ // 雙y坐標(biāo)軸
{
name: 'Revenue(10k)',
type: 'value',
splitLine: { // 網(wǎng)格線 y軸對(duì)應(yīng)的是否顯示
show: false
},
axisLabel: {
formatter: '{value}'
}
},
{
name: 'Growing\nRate (%)',
//nameLocation: 'start',
splitLine: { // 網(wǎng)格線 y軸對(duì)應(yīng)的是否顯示
show: false
},
min:0,
max: 300, // growing rate upper limit
type: 'value',
//top:10,
inverse: false,
axisLine: {
lineStyle: {
color: '#2f4554'
}
}
}],
series: [
{
name:'2016',
type:'bar',
color:'#00BFFF',
//stack: '總量',
markPoint : {
data : [
{type : 'max', name : '最大值'},
{type : 'min', name : '最小值'}
]
},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data:[1741.9, 977, 1742.2, 1431.1, 1636.2, 1447, 1711.7, 1921.2, 2609.6, 3332.6, 3647.3, 2498.1]
},
{
name:'2017',
type:'bar',
color: '#DC143C',
//stack: '總量',
markPoint : {
data : [
{type : 'max', name : '最大值'},
{type : 'min', name : '最小值'}
]
},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data:[2609, 1162.9, 2942.9, 5174.6, 5114.4, 5065.8, 3956.1, 3691.1, 4637.6, 4603.8, 6401.1, 4988.4]
},
{
name:'Growing Rate',
type:'line',
yAxisIndex: 1, // yAxisIndex 1 表示第二個(gè)y軸,默認(rèn)為0
color: '#FFD700',
//stack: '總量',
markPoint : {
data : [
{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
]
},
data:[49.8, 19, 68.9, 261.6, 212.6, 250.1, 131.1, 92.1, 77.7, 38.1, 75.5, 99.7]
}
]
},
// visualMap: { # 旁邊會(huì)有 視覺(jué)映射組件
// type: 'continuous',
// dimension: 1,
// text: ['High', 'Low'],
// inverse: true,
// itemHeight: 200,
// calculable: true,
// min: -2,
// max: 6,
// top: 60,
// left: 10,
// inRange: {
// colorLightness: [0.4, 0.8]
//},
// outOfRange: {
// color: '#bbb'
// },
// controller: {
// inRange: {
// color: '#01949B'
//}
// }
//},
//第2個(gè)graph
{
backgroundColor:'#FFFFFF', // 背景色
title: {
text: 'Cargo Load Factor-2016/2017',
textStyle:{
fontSize:14,
}
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['CLF-2016','CLF-2017'],
top:'18' // 距離容器頂端的距離
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false}, // 數(shù)據(jù)試圖是否在控件中顯示
saveAsImage: {show:true}
}
},
xAxis: {
type: 'category',
boundaryGap: false, // 坐標(biāo)軸兩邊留白策略
splitLine: { // 網(wǎng)格線 x軸對(duì)應(yīng)的是否顯示
show: false
},
data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
},
yAxis: {
type: 'value',
name: 'CLF(%)',
min: 70,
max: 100,
interval: 10,
splitLine: { // 網(wǎng)格線 y軸對(duì)應(yīng)的是否顯示
show: false
}
},
series: [
{
name:'CLF-2016',
type:'line',
data:[88.29, 83.68, 89.64, 90.47, 90.21, 93.63, 94.07, 90.85, 90.32, 90.56, 86.69, 81.77]
},
{
name:'CLF-2017',
type:'line',
data:[90.36, 86.21, 92.04, 89.91, 90.15, 90.38, 88.03, 88.99, 88.35, 87.18, 86.29, 81.23]
}
]
},
//第3個(gè)graph
{
backgroundColor:'#FFFFFF',
title: {
text: 'Sales Strcture of CAN-LAX in 2016',
//left:'center', // title位置
textStyle:{
fontSize:14,
}
},
tooltip: {
trigger: 'axis',
axisPointer: { // 坐標(biāo)軸指示器,坐標(biāo)軸觸發(fā)有效
type: 'shadow' // 默認(rèn)為直線,可選為:'line' | 'shadow'
}
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false}, // 數(shù)據(jù)試圖是否在控件中顯示
//magicType: {show: true, type: ['stack', 'tiled']},
//restore: {show: true},
saveAsImage: {show: true}
}
},
legend: {
data: ['直達(dá)', '中轉(zhuǎn)', '聯(lián)程', '郵件'],
top:'18'
},
grid: {
left: '2%',
right: '9%',
bottom: '3%',
containLabel: true,
show: false // 網(wǎng)格邊框是否顯示,上和右邊框
},
xAxis: [{
type: 'category',
splitLine: { // 網(wǎng)格線 x軸對(duì)應(yīng)的是否顯示
show: false
},
data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
}],
yAxis: [{
name: 'Revenue(10k)',
type: 'value',
splitLine: { // 網(wǎng)格線 y軸對(duì)應(yīng)的是否顯示
show: false
},
axisLabel: {
formatter: '{value}'
},
}],
series: [{
name: '直達(dá)',
type: 'bar',
itemStyle:{
normal:{color:'#01949B'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [919, 455.7, 1074.8, 911.7, 1006.8, 1075.6, 1106.1, 1274.5, 1755.6, 2562.7, 2056.1, 1227.9]
},
{
name: '中轉(zhuǎn)',
type: 'bar',
itemStyle:{
normal:{color:'#EBA954'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [567.1, 261.4, 456.8, 387, 419.2, 227, 417, 413.1, 564, 583, 915.9, 666.3]
}, {
name: '聯(lián)程',
type: 'bar',
itemStyle:{
normal:{color:'#C23531'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [255.9, 259.8, 210.5, 118.2, 196.5, 140.6, 188.6, 204.4, 290, 186.9, 661.3, 468.2]
},{
name: '郵件',
type: 'bar',
itemStyle:{
normal:{color:'#6495ED'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [0, 0, 0, 14.2, 13.7, 3.8, 0, 29.2, 0, 0, 14, 135.8]
}]
},
//第4個(gè)graph
{
backgroundColor:'#FFFFFF',
title: {
text: 'Cargo Structure Percentage',
subtext: '2016',
left: 'center',
subtextStyle:{
fontSize:18
}
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false}, // 數(shù)據(jù)試圖是否在控件中顯示
//magicType: {show: true, type: ['stack', 'tiled']},
//restore: {show: true},
saveAsImage: {show: true}
}
},
tooltip : {
trigger: 'item',
formatter: "{a} <br/> : {c} (2hov2ba%)"
},
legend: {
// orient: 'vertical',
// top: 'middle',
bottom: 20,
left: 'center',
data: ['直達(dá)', '中轉(zhuǎn)', '聯(lián)程', '郵件'],
show:false // legend 不顯示
},
series : [
{
name:'Cargo Source',
type: 'pie',
avoidLabelOverlap: false,
radius : '50%',
center: ['50%', '58%'],
selectedMode: 'single',
label: {
normal: {
show: true,
textStyle:{
fontSize: '10',
//fontWeight: 'bold'
},
formatter: ' : gmovx7t%',
position: 'outer'
},
emphasis: {
show: true,
textStyle: {
fontSize: '30',
fontWeight: 'bold'
}
}
},
labelLine: {
normal: {
show: true
}
},
data:[
{name: '直達(dá)', value: 61.8},
{name: '聯(lián)程', value: 13.2},
{name: '中轉(zhuǎn)', value: 24.2},
{name: '郵件', value: 0.8}
],
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
},
// 第5個(gè)graph
{
backgroundColor:'#FFFFFF',
title: {
text: 'Sales Strcture of CAN-LAX in 2017',
//left:'center', // title位置
textStyle:{
fontSize:14,
}
},
tooltip: {
trigger: 'axis',
axisPointer: { // 坐標(biāo)軸指示器,坐標(biāo)軸觸發(fā)有效
type: 'shadow' // 默認(rèn)為直線,可選為:'line' | 'shadow'
}
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false}, // 數(shù)據(jù)試圖是否在控件中顯示
//magicType: {show: true, type: ['stack', 'tiled']},
//restore: {show: true},
saveAsImage: {show: true}
}
},
legend: {
data: ['直達(dá)', '中轉(zhuǎn)', '聯(lián)程', '郵件'],
top:'18'
},
grid: {
left: '2%',
right: '9%',
bottom: '3%',
containLabel: true,
show: false // 網(wǎng)格邊框是否顯示,上和右邊框
},
xAxis: [{
type: 'category',
splitLine: { // 網(wǎng)格線 x軸對(duì)應(yīng)的是否顯示
show: false
},
data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
}],
yAxis: [{
name: 'Revenue(10k)',
type: 'value',
splitLine: { // 網(wǎng)格線 y軸對(duì)應(yīng)的是否顯示
show: false
},
axisLabel: {
formatter: '{value}'
},
}],
series: [{
name: '直達(dá)',
type: 'bar',
itemStyle:{
normal:{color:'#01949B'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [1504.2, 622.8, 2132, 3668.6, 3797.3, 3632.8, 2716, 2320.6, 3288.1, 3220, 3911.4, 2942]
},
{
name: '中轉(zhuǎn)',
type: 'bar',
itemStyle:{
normal:{color:'#EBA954'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [861.7, 196.6, 600.7, 836.2, 757.8, 804.2, 766.3, 797, 677.5, 734.2, 1363.5, 977.3]
}, {
name: '聯(lián)程',
type: 'bar',
itemStyle:{
normal:{color:'#C23531'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [240.6, 294.4, 202.6, 476.9, 308.3, 376.4, 334.7, 401, 514, 506.2, 766.2, 794.4]
},{
name: '郵件',
type: 'bar',
itemStyle:{
normal:{color:'#6495ED'},
},
//markPoint : {
//data : [
//{type : 'max', name : '最大值'},
//{type : 'min', name : '最小值'}
//]
//},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
},
data: [2.5, 49.1, 7.6, 192.9, 251, 252.3, 139.1, 172.5, 157.9, 143.4, 359.9, 274.7]
}]
},
//第6個(gè)graph
{
backgroundColor:'#FFFFFF',
title: {
text: 'Cargo Structure Percentage',
subtext: '2017',
left: 'center',
subtextStyle:{
fontSize:18
}
},
toolbox: {
feature: {
dataView: {show: false, readOnly: false}, // 數(shù)據(jù)試圖是否在控件中顯示
//magicType: {show: true, type: ['stack', 'tiled']},
//restore: {show: true},
saveAsImage: {show: true}
}
},
tooltip : {
trigger: 'item',
formatter: "{a} <br/> : {c} (w73ln72%)"
},
legend: {
// orient: 'vertical',
// top: 'middle',
bottom: 20,
left: 'center',
data: ['直達(dá)', '中轉(zhuǎn)', '聯(lián)程', '郵件'],
show:false // legend 不顯示
},
series : [
{
name:'Cargo Source',
type: 'pie',
avoidLabelOverlap: false,
radius : '50%',
center: ['50%', '58%'],
selectedMode: 'single',
label: {
normal: {
show: true,
textStyle:{
fontSize: '10',
//fontWeight: 'bold'
},
formatter: ' : 3b7r2pi%',
position: 'outer'
},
emphasis: {
show: true,
textStyle: {
fontSize: '30',
fontWeight: 'bold'
}
}
},
labelLine: {
normal: {
show: true
}
},
data:[
{name: '直達(dá)', value: 66.1},
{name: '聯(lián)程', value: 11.1},
{name: '中轉(zhuǎn)', value: 19.1},
{name: '郵件', value: 3.7}
],
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
];
因?yàn)椋瑒傞_(kāi)始做沒(méi)有發(fā)現(xiàn)第三種方式,所以暫時(shí)用的第二種方式,不太好控制位置和增減圖表。如果再讓我做我會(huì)選擇第三種,感覺(jué)更靈活一些。以上是我做整合的時(shí)候發(fā)現(xiàn)在的一個(gè)頁(yè)面多個(gè)圖表幾個(gè)實(shí)現(xiàn)方式,可能還有更好的,期待你的留言。
頁(yè)面靜態(tài)代碼很簡(jiǎn)單,下面來(lái)看網(wǎng)頁(yè)代碼布局:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>綜合統(tǒng)計(jì) - 大屏</title>
<link rel="stylesheet" type="text/css" href="skin/icon/iconfont.css" />
<link rel="stylesheet" type="text/css" href="skin/default/style.css" />
<script src="../scripts/jquery/jquery-1.11.2.min.js"></script>
<script src="js/common.js"></script>
<script src="../scripts/echart/echarts.min.js"></script>
<script src="../scripts/echart/china.js"></script>
<style>
#btnSet{padding:0;background-color:#020933;box-sizing:border-box;position:absolute;left:30px;top:24px;z-index:9999}
.btnPlay{height:20px;border-style:solid;border-width:10px 0 10px 20px;border-color:transparent transparent transparent #fff;transition:all .5s ease}
.btnPause{width:20px;height:20px;border-style:double;border-width:0 0 0 20px;border-color:#fff}
</style>
</head>
<body class="">
<form id="form1" runat="server">
<input type="hidden" id="start" name="start" value="0" />
<input type="button" id="btnSet" class="btnPause" title="點(diǎn)擊停止" />
<div id="mapContainer" class="mapContainer" style="background: #000000;"></div>
</form>
</body>
</html>
4. js實(shí)現(xiàn)圖形布局
<script>
/**
地圖級(jí)聯(lián)
*/
var mapContainer = document.getElementById('mapContainer');
//用于使chart自適應(yīng)高度和寬度,通過(guò)窗體高寬計(jì)算容器高寬
var resizeWorldMapContainer = function () {
$("#mapContainer").width($(window).width());
$("#mapContainer").height($(window).height());
//$("#mapContainer").css("width", $(window).width()+"px");
//$("#mapContainer").css("height", $(window).height()+"px");
};
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
var myChart = echarts.init(mapContainer);
var geoCoordMap = { '河南省': [113.664496, 34.817821], '河南': [113.75783, 34.502434], '北京市': [116.403694, 39.915378], '天津市': [117.216837, 39.142415], '上海市': [121.479662, 31.234329], '河北省': [114.494585, 38.129532], '山西省': [112.569095, 37.908919], '遼寧省': [123.445046, 41.806913], '吉林省': [126.582519, 43.86473], '新疆': [87.559985, 43.879367], '西藏': [91.160816, 29.653148], '內(nèi)蒙古': [111.771822, 40.93481], '四川省': [106.492302, 29.601285], '青海省': [101.73138, 36.627027], '廣東省': [113.254301, 23.129454], '湖南省': [112.953187, 28.265007] };
var data = [{ name: '河南省', value: 3 }, { name: '河南', value: 1 }, { name: '北京市', value: 1 }, { name: '天津市', value: 1 }, { name: '上海市', value: 2 }, { name: '河北省', value: 1 }, { name: '山西省', value: 1 }, { name: '遼寧省', value: 0 }, { name: '吉林省', value: 1 }, { name: '新疆', value: 0 }, { name: '西藏', value: 1 }, { name: '內(nèi)蒙古', value: 0 }, { name: '四川省', value: 0 }, { name: '青海省', value: 0 }, { name: '廣東省', value: 0 }, { name: '湖南省', value: 0 }];
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var geoCoord = geoCoordMap[data[i].name];
if (geoCoord) {
res.push({
name: data[i].name,
value: geoCoord.concat(data[i].value)
});
}
}
return res;
};
var uploadedDataURL = "../scripts/echart/china.json";
myChart.showLoading();
$.getJSON(uploadedDataURL, function (geoJson) {
echarts.registerMap('zhengzhou', geoJson);
myChart.hideLoading();
option = {
backgroundColor: '#020933',
title: {
top: 20,
left: 190,
text: '大屏統(tǒng)計(jì)總覽',
subtext: '',
x: 'left',
textStyle: {
color: '#ccc'
}
},
tooltip: {
trigger: 'axis',
axisPointer: { // 坐標(biāo)軸指示器,坐標(biāo)軸觸發(fā)有效
type: 'shadow' // 默認(rèn)為直線,可選為:'line' | 'shadow'
},
formatter: function (params) {
if (typeof (params.value)[2] == "undefined") {
//return params.name + ' : ' + params.value;
} else {//只有數(shù)據(jù)不為空才顯示
return params.name + ' : ' + params.value[2];
}
}
},
visualMap: {
show: false,
min: 0,
max: 500,
left: 'left',
top: 'bottom',
text: ['高', '低'], // 文本,默認(rèn)為數(shù)值文本
calculable: true,
seriesIndex: [1],
inRange: {
},
dimension: 0
},
//布局s
grid: [
{ x: '57%', y: '5%', width: '40%', height: '60%' },
{ x: '57%', y: '70%', width: '40%', height: '25%' }
],
xAxis: [{
title: "asdf",
gridIndex: 0,
type: 'value',
max: 10,//x軸刻度
axisLabel: {
show: true,
},
splitLine: {
show: true
}
}, {
gridIndex: 1,
type: 'category',
axisLabel: {
show: true,
},
splitLine: {
show: true
}, data: ['2018-07-30', '2018-07-31', '2018-08-01', '2018-08-02', '2018-08-03', '2018-08-04', '2018-08-05', '2018-08-06']
}],
yAxis: [{
gridIndex: 0,
type: 'category',
axisLabel: {
show: true,
textStyle: {
color: '#ddd'
}
}
}, {
gridIndex: 1,
type: 'value',
axisLabel: {
show: true,
textStyle: {
color: '#ddd'
}
}
}],
//布局e
geo: {
show: true,
map: 'zhengzhou',
label: {
normal: {
show: false
},
emphasis: {
show: false,
}
},
roam: false,//是否開(kāi)啟鼠標(biāo)縮放和平移漫游
itemStyle: {
normal: {
areaColor: 'transparent',
borderColor: '#3fdaff',
borderWidth: 2,
shadowColor: 'rgba(63, 218, 255, 0.5)',
shadowBlur: 30
},
emphasis: {
areaColor: '#2B91B7',
}
}
},
//調(diào)整顯示級(jí)別
layoutCenter: ['32%', '52%'],
layoutSize: 900,
series: [
{
name: '地圖臺(tái)站',
type: 'effectScatter',
coordinateSystem: 'geo',
data: convertData(data.sort(function (a, b) {
return b.value - a.value;
}).slice(0, 5)),
symbolSize: function (val) {
//return val[2] / 10;//地圖閃動(dòng)
return 20;
},
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
normal: {
formatter: '',
position: 'right',
show: true
}
},
itemStyle: {
normal: {
color: '#F4E925',
shadowBlur: 10,
shadowColor: '#05C3F9'
}
},
zlevel: 1
}, {
name: '政治面貌',
type: 'pie',
z: 2,
color: ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'],
selectedMode: 'single',
radius: [0, '15%'],
center: ['20%', '80%'],
label: {
normal: {
position: 'inner'
}
},
labelLine: {
normal: {
show: false
}
},
//顯示series中信息,提示框組件
tooltip: {
trigger: 'item',
formatter: "{a} <br/> : {c} (g7b27s7%)"
},
data: [{ value: 2, name: '無(wú)黨派人士' }, { value: 4, name: '黨員', selected: true }, { value: 5, name: '團(tuán)員' }, { value: 1, name: '其它' }]
},
{
name: '年齡占比',
type: 'pie',
z: 2,
// 全局調(diào)色盤。
color: ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'],
radius: ['20%', '30%'],
center: ['20%', '80%'],
label: { formatter: "占7j7tgsj%" },
itemStyle: { //itemStyle有正常顯示:normal,有鼠標(biāo)hover的高亮顯示:emphasis
emphasis: { //normal顯示陰影,與shadow有關(guān)的都是陰影的設(shè)置
shadowBlur: 10, //陰影大小
shadowOffsetX: 0, //陰影水平方向上的偏移
shadowColor: 'rgba(0, 0, 0, 0.5)' //陰影顏色
}
},
//顯示series中信息,提示框組件
tooltip: {
trigger: 'item',
formatter: "{a} <br/> : {c} (klo7dpg%)"
},
data: [{ value: 2, name: '18-25' }, { value: 8, name: '26-30' }, { value: 2, name: '31-40' }, { value: 0, name: '41-55' }, { value: 12, name: '55以上' }]
}
, {
id: 'bar',
name: '臺(tái)站排名',
type: 'bar',
xAxisIndex: 0,
yAxisIndex: 0,
label: {
normal: {
show: true,
position: ["100%", "40%"],
color: "#ffffff",
formatter: " : {c}"
}
},
tooltip: {
trigger: 'item',
formatter: " : {c}"
},
itemStyle: {
//每個(gè)柱子的顏色即為colorList數(shù)組里的每一項(xiàng),如果柱子數(shù)目多于colorList的長(zhǎng)度,則柱子顏色循環(huán)使用該數(shù)組
color: function (params) {
var colorList = ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'];
return colorList[params.dataIndex];
}
},
z: 2,
data: [{ value: 3, name: '河南省' }, { value: 1, name: '河南' }, { value: 1, name: '北京市' }, { value: 1, name: '天津市' }, { value: 2, name: '上海市' }, { value: 1, name: '河北省' }, { value: 1, name: '山西省' }, { value: 0, name: '遼寧省' }, { value: 1, name: '吉林省' }, { value: 0, name: '新疆' }, { value: 1, name: '西藏' }, { value: 0, name: '內(nèi)蒙古' }, { value: 0, name: '四川省' }, { value: 0, name: '青海省' }, { value: 0, name: '廣東省' }, { value: 0, name: '湖南省' }]
},
{
name: '請(qǐng)假',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
tooltip: {
trigger: 'item',
formatter: "{a} : {c}"
},
data: [1, 3, 2, 4, 1, 4, 3]
},
{
name: '遲到',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
tooltip: {
trigger: 'item',
formatter: "{a} : {c}"
},
data: [1, 2, 3, 4, 3, 2, 2]
},
{
name: '早退',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
tooltip: {
trigger: 'item',
formatter: "{a} : {c}"
},
data: [1, 2, 3, 4, 3, 2, 4]
},
{
name: '調(diào)休',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
tooltip: {
trigger: 'item',
formatter: "{a} : {c}"
},
data: [1, 3, 2, 4, 1, 4, 2]
},
{
name: '加班',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
tooltip: {
trigger: 'item',
formatter: "{a} : {c}"
},
data: [1, 3, 2, 4, 1, 4, 2]
},
{
name: '曠工',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
tooltip: {
trigger: 'item',
formatter: "{a} : {c}"
},
data: [1, 3, 2, 4, 1, 4, 2]
}
]
};
myChart.setOption(option);
//重置容器高寬
resizeWorldMapContainer();
myChart.resize();
redoMethod();
//用于使chart自適應(yīng)高度和寬度
window.onresize = function () {
//重置容器高寬
resizeWorldMapContainer();
myChart.resize();
};
//循環(huán)做某些事情
myChart.on('click', function (params) {
if (params.data) {
//var index = JSON.stringify(data).indexOf(params.data.name);//結(jié)果:index=1
//if (index >= 0) {//只對(duì)地圖點(diǎn)擊事件做判斷
//點(diǎn)擊某某臺(tái),考勤自動(dòng)變更
//1.點(diǎn)擊地圖變更2.點(diǎn)擊排行變更
if (params.seriesIndex == 0 || params.seriesIndex == 3) {
if ($("#btnSet").attr("title") == "點(diǎn)擊停止") {
$("#btnSet").trigger('click');
}
redoMethod(params.data.name);
}
//if (params.seriesIndex==3) {
// alert(params.data.name);
// //if ($("#btnSet").attr("title") == "點(diǎn)擊停止") {
// // $("#btnSet").trigger('click');
// //}
// //redoMethod(params.data.name);
//}
}
});
});
</script>
5. 定時(shí)循環(huán)jquery實(shí)現(xiàn)
地圖上的散點(diǎn)閃動(dòng)5秒切換一次,所有地圖信息參與輪詢。具體js代碼如下:
<script>
/**
* 調(diào)用本地的ashx
* @file 文件名
* @param get參數(shù) (a=1&b=2&c=3)
* @fn 回調(diào)函數(shù) : 服務(wù)端返回 result=xxx; 回調(diào)函數(shù)直接處理result變量。
*/
$.ashx = function (file, param, fn, er) {
var sUrl = file;
$.ajax({
type: "GET",
contentType: "application/json",
cache: false,
url: sUrl,
data: param,
dataType: "json",
success: fn,
error: er
});
};
var globalIndex = 0;
//地圖點(diǎn)擊時(shí)間
function redoMethod(deptname) {
if (!deptname) {
deptname = data[globalIndex].name;
globalIndex++;
if (globalIndex == data.length) {
globalIndex = 0;
}
}
//alert(name);
$.ashx("ajax的url地址", "action=xx&deptname=" + deptname, function (result) {
if (result) {
if (result.results == "") {
return;
}
//debugger;
//alert(result.results.politcal);
var option = myChart.getOption();
//動(dòng)態(tài)改變圖形
option.series[0].data = convertData(data);//地圖
option.series[0].symbolSize = function (val, params) {//標(biāo)記的大小
//alert(name.name);
if (deptname == params.name) {
return 35;//地圖閃動(dòng)
} else {
return 20;
}
};
option.series[0].itemStyle.color = function (params) {
if (deptname == params.name) {
return "rgba(245, 214, 251, 1)";
} else {
return "#F4E925";
}
};
option.series[1].data = result.results[0].politcal;//政治面貌
option.series[2].data = result.results[1].ageScale;//年齡占比
option.series[3].itemStyle.color = function (params) {
if (deptname == params.name) {
return "rgba(245, 214, 251, 1)";
} else {
var colorList = ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'];
return colorList[params.dataIndex];
}
}
option.series[4].data = [2, 7, 12, 6, 4, 6, 6, 3];//請(qǐng)假
option.series[5].data = [11, 5, 21, 3, 5, 10, 8, 5];//遲到
option.series[6].data = [6, 1, 11, 1, 7, 4, 3, 13];//早退
option.series[7].data = [7, 2, 22, 14, 4, 4, 6, 9];//調(diào)休
option.series[8].data = [20, 7, 23, 11, 8, 4, 4, 7];//加班
option.series[9].data = [33, 4, 24, 9, 6, 4, 1, 1];//曠工
myChart.setOption(option);
}
}, function (er) {
//alert("請(qǐng)求失敗");
});
}
$(function () {
//定時(shí)循環(huán)
var interval = setInterval("redoMethod()", 5000);//每隔一秒執(zhí)行一次redoMethod()
//假如有兩個(gè)按鈕:繼續(xù)、暫停
$("#btnSet").click(function () {//點(diǎn)擊暫停按鈕
if (interval) {
clearInterval(interval);
interval = null;
}
if ($(this).attr("title") == "點(diǎn)擊停止") {
$(this).attr("title", "點(diǎn)擊開(kāi)始");
$(this).attr("class", "btnPlay");
} else {
$(this).attr("title", "點(diǎn)擊停止");
$(this).attr("class", "btnPause");
interval = setInterval("redoMethod()", 5000);
}
});
});
</script>
6. 總結(jié)
以上就是我在處理同頁(yè)面多圖形統(tǒng)計(jì)且有級(jí)聯(lián)關(guān)系處理時(shí)的思路及采坑代碼,文中代碼均是從項(xiàng)目中復(fù)制出來(lái)的,完整率99.99%,代碼略亂,開(kāi)發(fā)中整理的思路注釋什么的未處理,見(jiàn)諒。
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
微信小程序?qū)崿F(xiàn)slideUp、slideDown滑動(dòng)效果及點(diǎn)擊空白隱藏功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)slideUp、slideDown滑動(dòng)效果及點(diǎn)擊空白隱藏功能,涉及微信小程序事件響應(yīng)、頁(yè)面元素屬性動(dòng)態(tài)操作實(shí)現(xiàn)滑動(dòng)與蒙層功能相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12
JS判斷字符串長(zhǎng)度的5個(gè)方法(區(qū)分中文和英文)
這篇文章主要介紹了JS判斷字符串長(zhǎng)度的5個(gè)方法,并且區(qū)分中文和英文,需要的朋友可以參考下2014-03-03
微信小程序?qū)崿F(xiàn)地區(qū)選擇偽五級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)地區(qū)選擇偽五級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
layui的layer.confirm如何獲取按鈕焦點(diǎn)
因?yàn)閍yer.confirm的按鈕并非采用button,而是a標(biāo)簽,所以獲取按鈕焦點(diǎn)獲取不到,要采用別的方法,下面介紹在ie11中和ie8中不同的寫(xiě)法,對(duì)layui layer.confirm獲取按鈕焦點(diǎn)相關(guān)知識(shí)感興趣的朋友一起看看吧2023-11-11
JS Array.from()將偽數(shù)組轉(zhuǎn)換成數(shù)組的方法示例
這篇文章主要介紹了JS Array.from()將偽數(shù)組轉(zhuǎn)換成數(shù)組的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
一個(gè)非常全面的javascript URL解析函數(shù)和分段URL解析方法
本文詳細(xì)介紹了一個(gè)非常全面的javascript URL解析函數(shù),可以解析一個(gè)URL中的協(xié)議、主機(jī)、查詢字符串甚至錨鏈接,非常實(shí)用,一并總結(jié)了js自帶的分段URL解析方法,需要的朋友可以參考下2014-04-04
js+html5實(shí)現(xiàn)半透明遮罩層彈框效果
這篇文章主要為大家詳細(xì)介紹了js+html5實(shí)現(xiàn)半透明遮罩層彈框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
JS+CSS實(shí)現(xiàn)感應(yīng)鼠標(biāo)漸變顯示DIV層的方法
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)感應(yīng)鼠標(biāo)漸變顯示DIV層的方法,涉及javascript對(duì)div層的逐漸顯示與隱藏的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-02-02

