配置项如下
var xAxisData = ['2018-01', '2018-02', '2018-03', '2018-04', '2018-05', '2018-06', '2018-07', '2018-08', '2018-09', '2018-10', '2018-11', '2018-12'];
var xAxisDataPre = ['2017-01', '2017-02', '2017-03', '2017-04', '2017-05', '2017-06', '2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12'];
var legendData = ['苹果', '三星', '华为'];
var title = "多x轴对比折线图";
var serieData = [];
var metaDate = [
[120, 140, 100, 120, 300, 230, 130, 170, 140, 120, 300, 230],
[200, 120, 300, 200, 170, 300, 200, 180, 200, 190, 300, 200],
[100, 200, 140, 300, 200, 180, 100, 300, 230, 130, 100, 300, ]
]
var metaDatePre = [
[110, 130, 90, 110, 290, 220, 120, 160, 130, 110, 290, 220],
[237, 281, 281, 119, 209, 272, 157, 170, 300, 107, 211, 227],
[143, 164, 207, 133, 168, 222, 164, 101, 158, 246, 104, 83]
]
for (var v = 0; v < legendData.length; v++) {
var serie = {
name: legendData[v],
type: 'line',
symbol: "circle",
symbolSize: 10,
data: metaDate[v],
xAxisIndex: 0
};
serieData.push(serie)
var seriePre = {
name: legendData[v],
type: 'line',
symbol: "circle",
symbolSize: 10,
data: metaDatePre[v],
smooth: false,
itemStyle: {
normal: {
lineStyle: {
width: 2,
type: 'dotted'
}
}
},
xAxisIndex: 1
}
serieData.push(seriePre)
}
var colors = ["#FF0000", "blue", "#5EBEFC", "#2EF7F3", "#FFFFFF"];
var option = {
backgroundColor: '#0f375f',
title: {
text: title,
textAlign: 'left',
textStyle: {
color: "#fff",
fontSize: "16",
fontWeight: "normal"
}
},
legend: {
show: true,
left: "right",
data: legendData,
y: "5%",
itemWidth: 18,
itemHeight: 12,
textStyle: {
color: "#fff",
fontSize: 14
},
},
dataZoom: [{
type: 'inside',
start: 0,
end: 20
},
{
start: 0,
end: 20,
handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
handleSize: '80%',
xAxisIndex: [0, 1],
handleStyle: {
color: '#fff',
shadowBlur: 3,
shadowColor: 'rgba(0, 0, 0, 0.6)',
shadowOffsetX: 2,
shadowOffsetY: 2
}
}
],
color: colors,
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#6a7985'
}
},
position: function(pt) {
return [pt[0], '10%']
},
confine: true,
textStyle: {
fontSize: 11
},
formatter: function(params, ticket, callback) {
const nodeName = new Set()
let nodeItem = ""
params.forEach((item) => {
nodeName.add(item.name)
if (!item.axisIndex) {
const preVal = params.find(_ => item.axisIndex !== _.axisIndex && item.seriesName === _.seriesName)
const val = (item.value / preVal.value).toFixed(2) + "%"
nodeItem += `<br />${item.marker}${item.seriesName}: ${val}`
}
})
return Array.from(nodeName).join(" vs ") + nodeItem
}
},
xAxis: [{
type: 'category',
axisLine: {
show: true,
lineStyle: {
color: '#6173A3'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#9ea7c4',
fontSize: 14
}
},
axisTick: {
show: false
},
data: xAxisData,
boundaryGap: false,
},
{
type: 'category',
show: false,
data: xAxisDataPre,
boundaryGap: false,
}
],
yAxis: [{
axisTick: {
show: false
},
splitLine: {
show: false
},
axisLabel: {
textStyle: {
color: '#9ea7c4',
fontSize: 14
}
},
axisLine: {
show: true,
lineStyle: {
color: '#6173A3'
}
},
}, ],
series: serieData
};