带区域的双折线
效果
代码
const xData = ['2020-7-01', '2020-7-02', '2020-7-03', '2020-7-04', '2020-7-05', '2020-7-06', '2020-7-07', '2020-7-08', '2020-7-09', '2020-7-10'];
const startValue = '2020-7-03';
const endValue = '2020-7-07';
const yTwoData = ['7', '7', '7', '27', '27', '7', '7', '27', '27', '27'];
const yOneData = ['13', '13', '13', '33', '33', '13', '13', '13', '13', '13'];
option = {
textStyle: {
fontSize: 12,
},
grid: {
top: 150,
right: 0,
bottom: 150,
left: 30,
containLabel: true,
},
dataZoom: [{
type: 'slider',
bottom: 40,
left: 40,
startValue,
endValue,
}, {
type: 'inside',
}],
xAxis: {
data: xData,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
color: '#333333',
},
axisPointer: {
type: 'line',
lineStyle: {
color: '#333333',
type: 'dashed',
}
}
},
yAxis: {
min: 0,
max: 40,
offset: 0,
splitLine: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
color: '#333333',
fontSize: 20,
lineHeight: 18,
formatter: (value, index) => {
switch (index) {
case 1:
return '异\n\n常';
case 3:
return '正\n\n常';
default:
return '';
}
},
},
},
tooltip: {
show: true,
trigger: 'axis',
backgroundColor: '#ffffff',
borderWidth: 1,
borderColor: '#333333',
textStyle: {
fontSize: 12,
color: '#333333',
},
},
series: [{
name: '正常背景',
type: 'line',
z: 1,
markArea: {
silent: true,
itemStyle: {
color: '#DDFAE4',
},
data: [
[{
x: 40,
yAxis: 21
}, {
x: '100%',
yAxis: 39
}]
],
}
},
{
name: '异常背景',
type: 'line',
z: 1,
markArea: {
silent: true,
itemStyle: {
color: '#FFE9E9',
},
data: [
[{
x: 40,
yAxis: 1,
}, {
x: '100%',
yAxis: 19
}]
],
}
},
{
name: '双折线-上',
type: 'line',
z: 2,
data: yOneData,
symbol: 'circle',
symbolSize: 4,
itemStyle: {
color: '#FF4D4F',
},
lineStyle: {
type: 'dashed',
width: 2,
color: '#FF4D4F'
},
},
{
name: '双折线-下',
type: 'line',
z: 2,
data: yTwoData,
symbol: 'circle',
symbolSize: 4,
itemStyle: {
color: '#40A9FF',
},
lineStyle: {
type: 'dashed',
width: 2,
color: '#40A9FF',
},
}
]
};
中间截断式折线图
效果
代码
import React, { useEffect, useRef } from 'react';
import * as echarts from 'echarts';
const xData = Array.from({ length: 31 }, () => 0).map((_, index) => `08-${index < 9 ? `0${index + 1}` : index + 1}`);
const yData = Array.from({ length: 31 }, () => Math.ceil(Math.random() * 100 + 10));
const option = {
// grid: {
// top: 30,
// right: 60,
// bottom: 30,
// left: 60,
// },
xAxis: {
type: 'category',
data: xData,
},
yAxis: {
type: 'value',
},
legend: {
show: true,
right: 0,
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
},
series: [
{
name: '晨检人次',
// 设置 undefined 则不显示
data: yData.map((item, index) => (index < 14 ? item : undefined)),
type: 'line',
},
],
};
const Charts = () => {
const chartRef = useRef();
const myChart = useRef();
const initChart = () => {
if (!myChart.current && chartRef?.current) {
myChart.current = echarts.init(chartRef.current);
myChart.current.setOption(option);
}
};
useEffect(() => {
initChart();
}, []);
return <div style={{ width: 800, height: 300 }} ref={chartRef} />;
};
export default Charts;