- 12334
- 21323
- 前端需求人数
- 市场供用人数
一、案例技术目录(数据可视化)
1、使用技术
①基于 flexible.js + rem 智能大屏适配
② VScode cssrem 插件
③ Flex 布局
④ Less 使用
⑤基于 ECharts 数据可视化展示
⑥ ECharts 柱状图数据设置
⑦ ECharts 地图引入
2、ECharts基础配置
① series
—系列列表,每个系列通过 type 决定自己的图表类型。
—图标数据,指定什么类型的图标,可以多个图标重叠。
② xAxis:直角坐标系 grid 中的 x 轴
— boundaryGap:坐标轴两边留白策略 true,这时候刻度只作为分割线,标签和数据点都会在两个刻度之间的带(band)中间。
② yAxis:直角坐标系 grid 中的 y 轴
③ grid:直角坐标系内绘图网格
④ title:标题组件
⑤ tooltip:提示框组件
⑥ legend:图例组件
⑦ color:调色盘颜色列表
——数据堆叠,同个类目轴上系列配置相同的 stack 值后,后一个系列的值会在前一个系列的值上相加
二、案例演示结果
三、案例代码
1、index.html
ECharts
数据可视化——ECharts
- 12334
- 21323
- 前端需求人数
- 市场供用人数
折线图-播放量
饼形图-地区分布
2、index.css
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
li {
list-style: none;
}
/* 1rem = 80px */
/* 声明字体*/
@font-face {
font-family: electronicFont;
src: url(../font/DS-DIGIT.TTF);
}
body {
background: url(../images/bg.jpg) no-repeat top center;
line-height: 1.15;
}
header {
position: relative;
height: 1.25rem;
background: url(../images/head_bg.png) no-repeat;
background-size: 100% 100%;
}
header h1 {
font-size: 0.475rem;
color: #fff;
text-align: center;
line-height: 1rem;
}
header .showTime {
position: absolute;
right: 0.375rem;
top: 0;
line-height: 0.9375rem;
color: rgba(255, 255, 255, 0.7);
font-size: 0.25rem;
}
.mainbox {
display: flex;
min-width: 1024px;
max-width: 1920px;
margin: 0 auto;
padding: 0.125rem 0.125rem 0;
}
.mainbox .column {
flex: 3;
}
.mainbox .column:nth-child(2) {
flex: 5;
margin: 0 0.125rem 0.1875rem;
overflow: hidden;
}
.mainbox .panel {
position: relative;
height: 3.875rem;
padding: 0 0.1875rem 0.5rem;
border: 1px solid rgba(25, 186, 139, 0.17);
margin-bottom: 0.1875rem;
background: url(../images/line.png) rgba(255, 255, 255, 0.03);
}
.mainbox .panel::before {
position: absolute;
top: 0;
left: 0;
width: 10px;
height: 10px;
border-left: 2px solid #02a6b5;
border-top: 2px solid #02a6b5;
content: "";
}
.mainbox .panel::after {
position: absolute;
top: 0;
right: 0;
width: 10px;
height: 10px;
border-right: 2px solid #02a6b5;
border-top: 2px solid #02a6b5;
content: "";
}
.mainbox .panel .panel-footer {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
}
.mainbox .panel .panel-footer::before {
position: absolute;
left: 0;
bottom: 0;
width: 10px;
height: 10px;
border-left: 2px solid #02a6b5;
border-bottom: 2px solid #02a6b5;
content: "";
}
.mainbox .panel .panel-footer::after {
position: absolute;
bottom: 0;
right: 0;
width: 10px;
height: 10px;
border-right: 2px solid #02a6b5;
border-bottom: 2px solid #02a6b5;
content: "";
}
.mainbox .panel h2 {
height: 0.6rem;
color: #fff;
line-height: 0.6rem;
text-align: center;
font-size: 0.25rem;
font-weight: 400;
}
.mainbox .panel h2 a {
color: #fff;
text-decoration: none;
margin: 0 0.125rem;
}
.mainbox .panel .chart {
height: 3rem;
}
.no {
background: rgba(101, 132, 226, 0.1);
padding: 0.1875rem;
}
.no .no-hd {
position: relative;
border: 1px solid rgba(25, 186, 139, 0.17);
}
.no .no-hd::before {
position: absolute;
top: 0;
left: 0;
content: "";
width: 30px;
height: 10px;
border-top: 2px solid #02a6b5;
border-left: 2px solid #02a6b5;
}
.no .no-hd::after {
position: absolute;
bottom: 0;
right: 0;
content: "";
width: 30px;
height: 10px;
border-right: 2px solid #02a6b5;
border-bottom: 2px solid #02a6b5;
}
.no .no-hd ul {
display: flex;
}
.no .no-hd ul li {
position: relative;
flex: 1;
line-height: 1rem;
font-size: 0.875rem;
color: #ffeb7b;
text-align: center;
font-family: "electronicFont";
}
.no .no-hd ul li::after {
content: "";
position: absolute;
top: 25%;
right: 0;
height: 50%;
width: 1px;
background: rgba(255, 255, 255, 0.2);
}
.no .no-bd ul {
display: flex;
}
.no .no-bd ul li {
flex: 1;
text-align: center;
color: rgba(255, 255, 255, 0.7);
font-size: 0.225rem;
height: 0.5rem;
line-height: 0.5rem;
padding-top: 0.125rem;
}
.map {
position: relative;
height: 10.125rem;
}
.map .map1 {
width: 6.475rem;
height: 6.475rem;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: url(../images/map.png);
background-size: 100% 100%;
opacity: 0.3;
}
.map .map2 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 8.0375rem;
height: 8.0375rem;
background: url(../images/lbx.png);
animation: rotate1 15s linear infinite;
opacity: 0.6;
background-size: 100% 100%;
}
.map .map3 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 7.075rem;
height: 7.075rem;
background: url(../images/jt.png);
animation: rotate2 10s linear infinite;
opacity: 0.6;
background-size: 100% 100%;
}
.map .chart {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 10.125rem;
}
@keyframes rotate1 {
form {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
@keyframes rotate2 {
form {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(-360deg);
}
}
/* 约束屏幕尺寸 */
@media screen and (max-width: 1024px) {
html {
font-size: 42px !important;
}
}
@media screen and (min-width: 1920px) {
html {
font-size: 80px !important;
}
}
3、index.js
①模块一:柱状图一
(function () {
//1、实例化对象
var myChart = echarts.init(document.querySelector(".bar .chart"));
//2、指定配置项和数据
var option = {
color: ['#2f89cf'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
//修改图表大小
grid: {
left: '0%',
top: "10px",
right: '0%',
bottom: '4%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: [
'旅游行业',
'教育培训',
'游戏行业',
'医疗行业',
'电商行业',
'社交行业',
'金融行业'
],
axisTick: {
alignWithLabel: true
},
//修改刻度标签相关样式
axisLabel: {
color: "rgba(255, 255, 255, 0.6)",
fontSize: 12,
},
//不显示x坐标轴
axisLine: {
show: false,
}
}
],
yAxis: [
{
type: 'value',
//修改刻度标签相关样式
axisLabel: {
color: "rgba(255, 255, 255, 0.6)",
fontSize: 12,
},
//设置y轴坐标轴线条的样式
axisLine: {
lineStyle: {
color: "rgba(255, 255, 255, 0.1)",
width: 2,
},
},
//设置y轴分割线的样式
splitLine: {
lineStyle: {
color: "rgba(255, 255, 255, 0.1)",
}
}
}
],
series: [
{
name: '直接访问',
type: 'bar',
//修改柱子宽度
barWidth: '35%',
data: [200, 300, 300, 900, 1500, 1200, 600],
itemStyle: {
//修改柱子圆角
barBorderRadius: 5,
//barBorderRadius: [5, 5, 0, 0] //(顺时针左上,右上,右下,左下)
}
}
]
};
//3、把配置项给实例对象
myChart.setOption(option);
//4、图表自适应屏幕
window.addEventListener('resize', function (ev) {
myChart.resize();
})
})();
②模块二:柱状图二
(function () {
//1、实例化对象
var myChart = echarts.init(document.querySelector(".bar2 .chart"));
var myColor = ["#1089E7", "#F57474", "#56D0E3", "#F8B448", "#8B78F6"];
//2、指定配置项和数据
var option = {
grid: {
top: "10%",
left: '22%',
bottom: '10%',
//containLabel: true
},
xAxis: {
show: false,
type: 'value',
boundaryGap: [0, 0.01],
axisLabel: {
color: "#fff",
}
},
yAxis: [
//两组y轴数据
{
type: 'category',
inverse: true,
data: ['HTML5', 'CSS3', 'JavaScript', 'VUE', 'NODE'],
//不显示y轴线条
axisLine: {
show: false,
},
//不显示刻度
axisTick: {
show: false,
},
//设置y轴文字颜色为白色
axisLabel: {
color: "#fff",
}
},
{
inverse: true,
data: [702, 350, 610, 793, 664],
//不显示y轴线条
axisLine: {
show: false,
},
//不显示刻度
axisTick: {
show: false,
},
//设置y轴文字颜色为白色
axisLabel: {
color: "#fff",
}
},
],
series: [
{
name: '条',
type: 'bar',
//柱子之间的距离
barCategoryGap: 50,
//柱子的宽度
barWidth: 10,
//柱子设为圆角
itemStyle: {
barBorderRadius: 20,
//修改柱子颜色
//1.声明颜色数据 代码99行声明
//2.给itemStyle里面的color属性设置一个返回值函数
color: function(params) {
//params传进来的是柱子对象
//dataIndex是当前柱子的索引号
var num = myColor.length;
return myColor[params.dataIndex];
},
},
label: {
show: true,
//图形内显示
position: 'inside',
//柱子内文字的显示格式
//{c}会自动解析数据 data内的数据
formatter: "{c}%",
},
data: [70, 34, 60, 78, 69]
},
{
name: '框',
type: 'bar',
barCategoryGap: 50,
barWidth: 12,
yAxisIndex: 1,
itemStyle: {
color: "none",
borderColor: "#00c1de",
boderWidth: 3,
barBorderRadius: 15,
},
data: [100, 100, 100, 100, 100]
},
]
};
//3、把配置项给实例对象
myChart.setOption(option);
//4、图表自适应屏幕
window.addEventListener('resize', function (ev) {
myChart.resize();
})
})();
③模块三:折线图一
(function () {
var yearData = [
{
year: '2020',
data: //两条线所以两个数组
[
[210,230,120,230,210,210,24,20,101,134,90,230],
[310,213,188,200,180,78,40,64,191,324,290,330],
]
},
{
year: '2021',
data: //两条线所以两个数组
[
[40,64,191,324,290,330,310,213,188,200,180,78],
[24,20,101,134,90,230,210,230,120,230,210,210],
]}
]
//1、实例化对象
var myChart = echarts.init(document.querySelector(".line .chart"));
//2、指定配置项和数据
var option = {
//修改两条线的颜色
color: ['#00f2f1', '#ed3f35'],
tooltip: {
trigger: 'axis'
},
//图例组件
legend: {
textStyle: {
//修改组件中文字颜色
color: "#4c9bfd",
},
//10% 必须加引号
right: "10%",
},
//设置网格样式
grid: {
top: '20%',
left: '3%',
right: '4%',
bottom: '3%',
//显示边框
show: true,
//边框颜色
borderColor: '#012f4a',
//包含刻度文字在内
containLabel: true
},
xAxis: {
type: 'category',
axisTick: {
//除去刻度线
show: false,
},
axisLabel: {
//文本颜色
color: '#4c9bfd',
},
axisLine: {
//去除轴线
show: false,
},
//去除轴间距
boundaryGap: false,
data: ['1月', '2月','3月', '4月','5月', '6月','7月','8月','9月','10月','11月','12月']
},
yAxis: {
type: 'value',
axisTick: {
//除去刻度线
show: false,
},
axisLabel: {
//文本颜色
color: '#4c9bfd',
},
splitLine: {
lineStyle: {
//分割线颜色
color: '#012f4a'
}
}
},
series: [
{
name: '新增粉丝',
type: 'line',
//让折线带弧度显示 true默认0.5
smooth: true,
data: yearData[0].data[0]
},
{
name: '新增游客',
type: 'line',
//让折线带弧度显示
smooth: true,
data: yearData[1].data[1]
},
]
};
//3、把配置项给实例对象
myChart.setOption(option);
//4、图表自适应屏幕
window.addEventListener('resize', function (ev) {
myChart.resize();
});
//5、点击 a 切换效果
$(".line h2").on("click", "a", function () {
//点击a之后 根据当前索引号 找到对应的yearData的相关对象
var obj = yearData[$(this).index()];
option.series[0].data = obj.data[0];
option.series[1].data = obj.data[1];
//需要重新渲染
myChart.setOption(option);
});
})();
④模块四:折线图二
(function () {
//1、实例化对象
var myChart = echarts.init(document.querySelector(".line2 .chart"));
//2、指定配置项和数据
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
top: '0%',
textStyle: {
color: "rgba(255, 255, 255, 0.5)",
fontSize: 12,
},
data: ['邮件营销', '联盟广告']
},
grid: {
left: '10',
top: '30',
right: '10',
bottom: '10',
containLabel: true
},
xAxis: [
{
type: 'category',
axisLine: {
lineStyle: {
color: "rgba(255, 255, 255, 0.2)"
}
},
//文本标签
axisLabel: {
textStyle: {
color: "rgba(255, 255, 255, 0.6)",
fontSize: 12,
},
},
boundaryGap: false,
data: [
'1','2','3','4','5','6','7','8','9','10',
'11','12','13','14','15','16','17','18','19','20',
'21','22','23','24','25','26','27','28','29','30',
],
}
],
yAxis: [
{
type: 'value',
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: "rgba(255, 255, 255, 0.1)",
}
},
axisLabel: {
textStyle: {
color: "rgba(255, 255, 255, 0.6)",
fontSize: 12,
}
},
//修改分割线颜色
splitLine: {
lineStyle: {
color: "rgba(255, 255, 255, 0.1)",
}
}
}
],
series: [
{
name: '播放量',
type: 'line',
smooth: 'true',
//单独修改线条样式
lineStyle: {
color: "#0184d5",
width: "2",
},
//填充区域颜色设置
// 填充颜色设置
areaStyle: {
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
// 渐变色的起始颜色
color: "rgba(1, 132, 213, 0.4)"
},
{
offset: 0.8,
// 渐变线的结束颜色
color: "rgba(1, 132, 213, 0.1)"
}
],
false
),
shadowColor: "rgba(0, 0, 0, 0.1)"
},
//设置拐点 此案例设置为小圆点
symbol: "circle",
//拐点大小
symbolSize: 7,
itemStyle: {
color: "#0184d5",
borderColor: "rgba(221, 220, 107, 0.1)",
borderWidth: 12,
},
//开始时不显示,设置为鼠标经过显示
showSymbol: false,
data: [
120, 132, 101, 134, 90,
230, 210, 150, 255, 164,
210, 279, 130, 345, 180,
120, 132, 101, 134, 90,
210, 279, 130, 345, 180,
220, 270 ,190,279, 130
]
},
{
name: '转发量',
type: 'line',
smooth: 'true',
//单独修改线条样式
lineStyle: {
color: "#00d887",
width: "2",
},
//填充区域颜色设置
// 填充颜色设置
areaStyle: {
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
// 渐变色的起始颜色
color: "rgba(0, 216, 135, 0.4)"
},
{
offset: 0.8,
// 渐变线的结束颜色
color: "rgba(0, 216, 135, 0.1)"
}
],
false
),
shadowColor: "rgba(0, 0, 0, 0.1)"
},
//设置拐点 此案例设置为小圆点
symbol: "circle",
//拐点大小
symbolSize: 5,
itemStyle: {
color: "#00d887",
borderColor: "rgba(221, 220, 107, 0.1)",
borderWidth: 8,
},
//开始时不显示,设置为鼠标经过显示
showSymbol: false,
data: [
220, 182, 191, 234, 290,
210, 279, 130, 345, 180,
220, 270 ,190,279, 130,
220, 182, 191, 234, 290,
330, 310,210, 279, 130,
120, 132, 101, 134, 90,
]
},
]
};
//3、把配置项给实例对象
myChart.setOption(option);
//4、图表自适应屏幕
window.addEventListener('resize', function (ev) {
myChart.resize();
})
})();
⑤模块五:饼形图一
(function () {
//1、实例化对象
var myChart = echarts.init(document.querySelector(".pie .chart"));
//2、指定配置项和数据
var option = {
color: [
"#065aab",
"#066eab",
"#0682ab",
"#0696ab",
"#06a0ab",
],
tooltip: {
trigger: 'item',
formatter: '{a}
{b}: {c} ({d}%)'
},
legend: {
//底部距离
bottom: "0%",
//修改小图标的宽度和高度
itemWidth: 10,
itemHeight: 10,
//文字颜色大小
textStyle: {
color: "rgba(255, 255, 255, 0.5)",
fontSize: "12",
},
data: ['20岁以下', '20-29岁', '30-39岁', '40-49岁', '50-59岁']
},
series: [
{
name: '年龄分布',
type: 'pie',
//设置饼形图在容器内的位置
center: ["50%", "50%"],
//修改 内圆半径 和 外圆半径 为百分比是相对于容器来说的
radius: ['40%', '60%'],
avoidLabelOverlap: false,
//图形上的文字—隐藏
label: {
//不显示标签文字
show: false,
},
labelLine: {
//不显示图形与文字的连接线
show: false
},
data: [
{value: 335, name: '20岁以下'},
{value: 310, name: '20-29岁'},
{value: 234, name: '30-39岁'},
{value: 135, name: '40-49岁'},
{value: 1548, name: '50-59岁'}
]
}
]
};
//3、把配置项给实例对象
myChart.setOption(option);
//4、图表自适应屏幕
window.addEventListener('resize', function (ev) {
myChart.resize();
})
})();
⑥模块六:饼形图二
(function () {
//1、实例化对象
var myChart = echarts.init(document.querySelector(".pie2 .chart"));
//2、指定配置项和数据
var option = {
color: [
"#006cff",
"#60cda0",
"#ed8884",
"#ff9f7f",
"#9fe6b8",
"#0096ff",
"#32c5e9",
"#1d9dff",
],
//提示信息
tooltip: {
trigger: 'item',
formatter: '{a}
{b} : {c} ({d}%)'
},
legend: {
//底部距离
bottom: "0%",
//修改小图标的宽度和高度
itemWidth: 10,
itemHeight: 10,
//文字颜色大小
textStyle: {
color: "rgba(255, 255, 255, 0.5)",
fontSize: "12",
},
data: ['北京', '深圳', '上海', '武汉', '成都', '重庆', '海南','长沙']
},
series: [
{
name: '地区分布',
type: 'pie',
radius: ['10%', '70%'],
center: ['50%', '50%'],
//文字标签控制图形文字的样式,是一个对象
label: {
fontSize: 10,
},
//链接图形和文字的线条
labelLine: {
smooth: 0.2,
//链接图形的线条
length: 10,
//链接文字的线条
length2: 20
},
data: [
{value: 500, name: '北京'},
{value: 310, name: '深圳'},
{value: 274, name: '上海'},
{value: 235, name: '武汉'},
{value: 120, name: '成都'},
{value: 190, name: '重庆'},
{value: 274, name: '海南'},
{value: 400, name: '长沙'}
].sort(function (a, b) { return a.value - b.value; }),
roseType: 'radius',
animationType: 'scale',
animationEasing: 'elasticOut',
animationDelay: function (idx) {
return Math.random() * 200;
}
}
]
};
//3、把配置项给实例对象
myChart.setOption(option);
//4、图表自适应屏幕
window.addEventListener('resize', function (ev) {
myChart.resize();
})
})();
4、myMap.js(ECharts实例复制的)
//模拟飞行路线模块地图模块
(function() {
// 1. 实例化对象
var myChart = echarts.init(document.querySelector(".map .chart"));
// 2. 指定配置和数据
// 2. 指定配置和数据
var geoCoordMap = {
上海: [121.4648, 31.2891],
东莞: [113.8953, 22.901],
东营: [118.7073, 37.5513],
中山: [113.4229, 22.478],
临汾: [111.4783, 36.1615],
临沂: [118.3118, 35.2936],
丹东: [124.541, 40.4242],
丽水: [119.5642, 28.1854],
乌鲁木齐: [87.9236, 43.5883],
佛山: [112.8955, 23.1097],
保定: [115.0488, 39.0948],
兰州: [103.5901, 36.3043],
包头: [110.3467, 41.4899],
北京: [116.4551, 40.2539],
北海: [109.314, 21.6211],
南京: [118.8062, 31.9208],
南宁: [108.479, 23.1152],
南昌: [116.0046, 28.6633],
南通: [121.1023, 32.1625],
厦门: [118.1689, 24.6478],
台州: [121.1353, 28.6688],
合肥: [117.29, 32.0581],
呼和浩特: [111.4124, 40.4901],
咸阳: [108.4131, 34.8706],
哈尔滨: [127.9688, 45.368],
唐山: [118.4766, 39.6826],
嘉兴: [120.9155, 30.6354],
大同: [113.7854, 39.8035],
大连: [122.2229, 39.4409],
天津: [117.4219, 39.4189],
太原: [112.3352, 37.9413],
威海: [121.9482, 37.1393],
宁波: [121.5967, 29.6466],
宝鸡: [107.1826, 34.3433],
宿迁: [118.5535, 33.7775],
常州: [119.4543, 31.5582],
广州: [113.5107, 23.2196],
廊坊: [116.521, 39.0509],
延安: [109.1052, 36.4252],
张家口: [115.1477, 40.8527],
徐州: [117.5208, 34.3268],
德州: [116.6858, 37.2107],
惠州: [114.6204, 23.1647],
成都: [103.9526, 30.7617],
扬州: [119.4653, 32.8162],
承德: [117.5757, 41.4075],
拉萨: [91.1865, 30.1465],
无锡: [120.3442, 31.5527],
日照: [119.2786, 35.5023],
昆明: [102.9199, 25.4663],
杭州: [119.5313, 29.8773],
枣庄: [117.323, 34.8926],
柳州: [109.3799, 24.9774],
株洲: [113.5327, 27.0319],
武汉: [114.3896, 30.6628],
汕头: [117.1692, 23.3405],
江门: [112.6318, 22.1484],
沈阳: [123.1238, 42.1216],
沧州: [116.8286, 38.2104],
河源: [114.917, 23.9722],
泉州: [118.3228, 25.1147],
泰安: [117.0264, 36.0516],
泰州: [120.0586, 32.5525],
济南: [117.1582, 36.8701],
济宁: [116.8286, 35.3375],
海口: [110.3893, 19.8516],
淄博: [118.0371, 36.6064],
淮安: [118.927, 33.4039],
深圳: [114.5435, 22.5439],
清远: [112.9175, 24.3292],
温州: [120.498, 27.8119],
渭南: [109.7864, 35.0299],
湖州: [119.8608, 30.7782],
湘潭: [112.5439, 27.7075],
滨州: [117.8174, 37.4963],
潍坊: [119.0918, 36.524],
烟台: [120.7397, 37.5128],
玉溪: [101.9312, 23.8898],
珠海: [113.7305, 22.1155],
盐城: [120.2234, 33.5577],
盘锦: [121.9482, 41.0449],
石家庄: [114.4995, 38.1006],
福州: [119.4543, 25.9222],
秦皇岛: [119.2126, 40.0232],
绍兴: [120.564, 29.7565],
聊城: [115.9167, 36.4032],
肇庆: [112.1265, 23.5822],
舟山: [122.2559, 30.2234],
苏州: [120.6519, 31.3989],
莱芜: [117.6526, 36.2714],
菏泽: [115.6201, 35.2057],
营口: [122.4316, 40.4297],
葫芦岛: [120.1575, 40.578],
衡水: [115.8838, 37.7161],
衢州: [118.6853, 28.8666],
西宁: [101.4038, 36.8207],
西安: [109.1162, 34.2004],
贵阳: [106.6992, 26.7682],
连云港: [119.1248, 34.552],
邢台: [114.8071, 37.2821],
邯郸: [114.4775, 36.535],
郑州: [113.4668, 34.6234],
鄂尔多斯: [108.9734, 39.2487],
重庆: [107.7539, 30.1904],
金华: [120.0037, 29.1028],
铜川: [109.0393, 35.1947],
银川: [106.3586, 38.1775],
镇江: [119.4763, 31.9702],
长春: [125.8154, 44.2584],
长沙: [113.0823, 28.2568],
长治: [112.8625, 36.4746],
阳泉: [113.4778, 38.0951],
青岛: [120.4651, 36.3373],
韶关: [113.7964, 24.7028]
};
var XAData = [
[{ name: "西安" }, { name: "北京", value: 100 }],
[{ name: "西安" }, { name: "上海", value: 100 }],
[{ name: "西安" }, { name: "广州", value: 100 }],
[{ name: "西安" }, { name: "西宁", value: 100 }],
[{ name: "西安" }, { name: "拉萨", value: 100 }]
];
var XNData = [
[{ name: "西宁" }, { name: "北京", value: 100 }],
[{ name: "西宁" }, { name: "上海", value: 100 }],
[{ name: "西宁" }, { name: "广州", value: 100 }],
[{ name: "西宁" }, { name: "西安", value: 100 }],
[{ name: "西宁" }, { name: "银川", value: 100 }]
];
var YCData = [
[{ name: "拉萨" }, { name: "北京", value: 100 }],
[{ name: "拉萨" }, { name: "潍坊", value: 100 }],
[{ name: "拉萨" }, { name: "哈尔滨", value: 100 }]
];
var planePath =
"path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z";
//var planePath = 'arrow';
var convertData = function(data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var dataItem = data[i];
var fromCoord = geoCoordMap[dataItem[0].name];
var toCoord = geoCoordMap[dataItem[1].name];
if (fromCoord && toCoord) {
res.push({
fromName: dataItem[0].name,
toName: dataItem[1].name,
coords: [fromCoord, toCoord],
value: dataItem[1].value
});
}
}
return res;
};
var color = ["#fff", "#fff", "#fff"]; //航线的颜色
var series = [];
[
["西安", XAData],
["西宁", XNData],
["银川", YCData]
].forEach(function(item, i) {
series.push(
{
name: item[0] + " Top3",
type: "lines",
zlevel: 1,
effect: {
show: true,
period: 6,
trailLength: 0.7,
color: "red", //arrow箭头的颜色
symbolSize: 3
},
lineStyle: {
normal: {
color: color[i],
width: 0,
curveness: 0.2
}
},
data: convertData(item[1])
},
{
name: item[0] + " Top3",
type: "lines",
zlevel: 2,
symbol: ["none", "arrow"],
symbolSize: 10,
effect: {
show: true,
period: 6,
trailLength: 0,
symbol: planePath,
symbolSize: 15
},
lineStyle: {
normal: {
color: color[i],
width: 1,
opacity: 0.6,
curveness: 0.2
}
},
data: convertData(item[1])
},
{
name: item[0] + " Top3",
type: "effectScatter",
coordinateSystem: "geo",
zlevel: 2,
rippleEffect: {
brushType: "stroke"
},
label: {
normal: {
show: true,
position: "right",
formatter: "{b}"
}
},
symbolSize: function(val) {
return val[2] / 8;
},
itemStyle: {
normal: {
color: color[i]
},
emphasis: {
areaColor: "#2B91B7"
}
},
data: item[1].map(function(dataItem) {
return {
name: dataItem[1].name,
value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value])
};
})
}
);
});
var option = {
tooltip: {
trigger: "item",
formatter: function(params, ticket, callback) {
if (params.seriesType == "effectScatter") {
return "线路:" + params.data.name + "" + params.data.value[2];
} else if (params.seriesType == "lines") {
return (
params.data.fromName +
">" +
params.data.toName +
"
" +
params.data.value
);
} else {
return params.name;
}
}
},
geo: {
map: "china",
label: {
emphasis: {
show: true,
color: "#fff"
}
},
roam: false,
// 放大我们的地图
zoom: 1,
itemStyle: {
normal: {
areaColor: "rgba(43, 196, 243, 0.42)",
borderColor: "rgba(43, 196, 243, 1)",
borderWidth: 1
},
emphasis: {
areaColor: "#2B91B7"
}
}
},
series: series
};
myChart.setOption(option);
window.addEventListener("resize", function() {
myChart.resize();
});
})();