配置项如下
let Dates = ['2021-10-14 11:00:00','2021-10-14 12:00:00','2021-10-14 13:00:00','2021-10-14 14:00:00','2021-10-14 15:00:00','2021-10-14 16:00:00','2021-10-14 17:00:00','2021-10-14 18:00:00','2021-10-14 19:00:00','2021-10-14 20:00:00','2021-10-14 21:00:00','2021-10-14 22:00:00','2021-10-14 23:00:00','2021-10-15 00:00:00','2021-10-15 01:00:00','2021-10-15 02:00:00','2021-10-15 03:00:00','2021-10-15 04:00:00','2021-10-15 05:00:00','2021-10-15 06:00:00','2021-10-15 07:00:00','2021-10-15 08:00:00','2021-10-15 09:00:00','2021-10-15 10:00:00']
let R1h = ['0','0','0','0','0','0','0','0','0','0','0','0','0.8','0.9','0.6','0.1','0','0.4','0.3','0.1','0','0.1','1.3','0.3']
let T2m = ['17.2','17.7','17.6','17.3','17','17.4','17.1','16.9','16.5','16.1','15.9','15.4','15.4','15.3','15.2','15.2','15.2','15.2','14.7','13.8','14.1','14.5','14.5','']
let RH2m = ['74','71','70','71','73','73','69','71','72','76','78','80','79','79','79','77','77','78','82','90','90','84','84','']
let Win10m_S = ['2.9','2.9','2.2','2.7','3.3','1.1','2.6','3.5','3.2','3.1','1','2.8','2.9','2.4','2','2.1','1.4','1.1','1.6','1.3','0.4','1.3','2.5','']
let Win10m_D =['84','80','97','120','112','74','348','110','92','89','130','115','111','58','104','97','82','7','108','86','115','86','104','']
let MaxWin10m_S = ['9.5','7.1','6.8','7.7','7.5','6.2','7.4','7.2','7.8','7.4','7.8','7.8','7.1','6.6','6.6','6.6','7.3','5.1','5.1','5.2','3.9','5.7','7','']
let MaxWin10m_D = ['97','74','107','84','102','53','58','90','97','120','113','127','77','90','97','102','55','90','30','100','12','89','103','']
let xAxisData = [], Win10mArray = [], MaxWin10mArray = [];
Dates.forEach((item,index) => {
let pattern = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/g;
xAxisData.push(item.replace(pattern, '$3日\n$4时'));
if(Win10m_S[index]){
let _w10 = {
value: [index, 1],
symbol: getWindShaftPic(Win10m_S[index]),
symbolSize: [8, 20],
symbolRotate: `-${Win10m_D[index]}`,
}
Win10mArray.push(_w10)
}
if(MaxWin10m_S[index]){
let _w10 = {
value: [index, 1],
symbol: getWindShaftPic(MaxWin10m_S[index]),
symbolSize: [8, 20],
symbolRotate: `-${MaxWin10m_D[index]}`,
}
MaxWin10mArray.push(_w10)
}
})
let splitNumber = 6; // 分割段数
option = {
title: {
text: 'Demo Chart',
subtext: '2021年10月14日11时 - 2021年10月15日10时',
textStyle: { color: '#000000' },
subtextStyle: { color: '#000000' },
left: 'center',
top: '2%'
},
grid: [
{
top: '14%',
left: '8%',
right: '8%',
bottom: '30%'
},
{
top: '70%',
left: '8%',
right: '8%',
bottom: '20%'
},
{
top: '80%',
left: '8%',
right: '8%',
bottom: '10%'
}
],
legend: {
top: '9%',
textStyle: { fontWeight:'bold' }
},
tooltip: [
{
trigger: 'axis',
formatter: (params, ticket, callback) => {
console.log(params)
let index = params[0].dataIndex;
let pattern = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/g;
let Htm = `${Dates[index].replace(pattern, '$1年$2月$3日$4时')}<br>`;
params.forEach((item) => {
let {marker, seriesName, data, seriesId} = item;
if(seriesId == 'Win10m'){
Htm += `${marker} 风速:${Win10m_S[index]}m/s 角度:${Win10m_D[index]}°`;
} else if(seriesId == 'MaxWin10m' ){
Htm += `${marker} 风速:${MaxWin10m_S[index]}m/s 角度:${MaxWin10m_D[index]}°`;
} else {
Htm += `${marker} ${seriesName}: ${data}${unit[seriesId]}<br>`;
}
})
return Htm
}
}
],
xAxis: [
{
boundaryGap: true,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: {
alignWithLabel: true, // 刻度线和标签对齐
interval: 0,
inside: true // 坐标轴刻度朝内
},
axisLabel: { show: false },
data: Dates
},
{
position: 'top',
axisLine:{ lineStyle: { color:'#000000', width:2 } },
},
{
gridIndex: 1,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: { show: false },
axisLabel: { show: false },
data: Dates
},
{
gridIndex: 2,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: {
alignWithLabel: true, // 刻度线和标签对齐
interval: 0, // 坐标轴刻度朝内
inside: true
},
axisLabel: { color: '#000000', fontSize: 14, fontWeight:'bold' },
data: xAxisData
}
],
yAxis: [
{
name: '温度(℃)',
nameLocation:'center',
nameGap: 48,
nameTextStyle: { color:'#000000', fontSize:14, fontWeight:'bold' },
// min: calMin(T2m),
// max: calMax(T2m),
// minInterval: 1,
// splitNumber: splitNumber,
// interval: (calMax(T2m) - calMin(T2m)) / splitNumber,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: { show:false },
axisLabel: { textStyle: { color:'#000000', fontSize:13, fontWeight:'bold' }},
splitLine: { show:true, lineStyle: { color:'#000000' } }
},
{
show: false,
name: '1小时降水',
max: (value) => {
return value.max + 0.1;
}
},
{
name: '相对湿度(%)',
nameLocation:'center',
nameGap: 48,
nameTextStyle: { color:'#000000', fontSize:14, fontWeight:'bold' },
// min: calMin(RH2m),
// max: calMax(RH2m),
// minInterval: 1,
// splitNumber: splitNumber,
// interval: (calMax(RH2m) - calMin(RH2m)) / splitNumber,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: { show:false },
axisLabel: { textStyle: { color:'#000000', fontSize:13, fontWeight:'bold' }},
splitLine: { show:false }
},
{
gridIndex: 1,
name: '10米风',
nameLocation:'center',
nameGap: 20,
nameTextStyle: { color:'#000000', fontSize:14, fontWeight:'bold' },
max: 2,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: { show:false },
axisLabel: {show:false },
splitLine: { show:false }
},
{
gridIndex: 1,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } }
},
{
gridIndex: 2,
name: '10米极大风',
nameLocation:'center',
nameGap: 20,
nameTextStyle: { color:'#000000', fontSize:14, fontWeight:'bold' },
max: 2,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } },
axisTick: { show:false },
axisLabel: {show:false },
splitLine: { show:false }
},
{
gridIndex: 2,
axisLine:{ show: true, lineStyle: { color:'#000000', width:2 } }
},
],
series: [
{
type: 'bar',
id: 'R1h',
name: '1小时降水',
color: '#4bc946',
yAxisIndex: 1,
barWidth: '50%',
label: {
show: true,
formatter: (params) => {
if(Number(params.data) === 0) return '';
},
fontWeight: 'bold',
position: 'top'
},
data: R1h
},
{
type: 'line',
id: 'T2m',
name: '2米温度',
symbol: 'rect',
symbolSize: 6,
color: '#fda975',
// smooth: true,
data: T2m
},
{
type: 'line',
id: 'RH2m',
name: '2米相对湿度',
symbolSize: 6,
yAxisIndex: 2,
color: '#27d3e2',
// smooth: true,
data: RH2m
},
{
type: 'line',
id: 'Win10m',
name: '10米风',
symbol: 'circle',
symbolSize: 6,
xAxisIndex: 2,
yAxisIndex: 3,
lineStyle: { width:1, opacity:0.5 },
data: Win10mArray
},
{
type: 'line',
id: 'MaxWin10m',
name: '10米极大风',
symbol: 'circle',
xAxisIndex: 3,
yAxisIndex: 5,
lineStyle: { width:1, opacity:0.5 },
data: MaxWin10mArray
}
]
};
let unit = {
R1h: 'mm',
T2m: '℃',
RH2m: '%'
}
//计算最大值
function calMax(arr) {
let min = Math.min.apply(null, arr);
let max = Math.max.apply(null, arr);
let interval = (max - min) / splitNumber; // 平均值
max = Math.ceil(max + interval); // 向上取整
// console.log(min, max, interval);
return max;
}
//计算最小值
function calMin(arr) {
let min = Math.min.apply(null, arr);
let max = Math.max.apply(null, arr);
let interval = (max - min) / splitNumber; // 平均值
min = min === 0 ? min : Math.floor(min - interval); // 向下取整
// console.log(min, max, interval);
return min;
}
function getWindShaftPic(windspeed) {
let Pic = 'none';
if(windspeed === '') return Pic
if (windspeed >= 0.0 && windspeed <= 0.2) {
Pic = `image:///asset/get/s/data-1631783476618-wOIHrfnEO.png`;
} else if (windspeed >= 0.3 && windspeed <= 1.5) {
Pic = `image:///asset/get/s/data-1631783483071-cfwLbKcYl.png`;
} else if (windspeed >= 1.6 && windspeed <= 3.3) {
Pic = `image:///asset/get/s/data-1631783495125-601rObfu3.png`;
} else if (windspeed >= 3.4 && windspeed <= 5.4) {
Pic = `image:///asset/get/s/data-1631783502405-jwbOFdS4D.png`;
} else if (windspeed >= 5.5 && windspeed <= 7.9) {
Pic = `image:///asset/get/s/data-1631783519568-qdPwqtQUg.png`;
} else if (windspeed >= 8.0 && windspeed <= 10.7) {
Pic = `image:///asset/get/s/data-1631783526956-IJh4S6NaA.png`;
} else if (windspeed >= 10.8 && windspeed <= 13.8) {
Pic = `image:///asset/get/s/data-1631783532927-sNH7zekiO.png`;
} else if (windspeed >= 13.9 && windspeed <= 17.1) {
Pic = `image:///asset/get/s/data-1631783538130-P00G2yMyc.png`;
} else if (windspeed >= 17.2 && windspeed <= 20.7) {
Pic = `image:///asset/get/s/data-1631783543740-JER6mEii7.png`;
} else if (windspeed >= 20.8 && windspeed <= 24.4) {
Pic = `image:///asset/get/s/data-1631783552096-Dwu8REasT.png`;
} else if (windspeed >= 24.5 && windspeed <= 28.4) {
Pic = `image:///asset/get/s/data-1631783557036-3FbF8qpJs.png`;
} else if (windspeed >= 28.5 && windspeed <= 32.6) {
Pic = `image:///asset/get/s/data-1631783561430-bRSvCqsew.png`;
} else if (windspeed >= 32.7) {
Pic = `image:///asset/get/s/data-1631783565641-ENAZ32bTX.png`;
}
return Pic
}