效果
文字说不清楚,看图。就是同一个X坐标,在提示框同时显示上下两部分的数据
实例
function splitData(rawData) {
var categoryData = [];
var values = [];
var volumns = [];
for (var i = 0; i < rawData.length; i++) {
categoryData.push(rawData[i].splice(0, 1)[0]);
values.push(rawData[i]);
volumns.push(rawData[i][4]);
}
return {
categoryData: categoryData,
values: values,
volumns: volumns
};
}
function calculateMA(dayCount, data) {
var result = [];
for (var i = 0, len = data.values.length; i < len; i++) {
if (i < dayCount) {
result.push('-');
continue;
}
var sum = 0;
for (var j = 0; j < dayCount; j++) {
sum += data.values[i - j][1];
}
result.push(+(sum / dayCount).toFixed(3));
}
return result;
}
$.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) {
var data = splitData(rawData);
myChart.setOption(
(option = {
animation: false,
legend: {
bottom: 10,
left: 'center',
data: ['Dow-Jones index', 'MA5', 'MA10', 'MA20', 'MA30']
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
},
backgroundColor: 'rgba(255, 255, 255, 0.8)',
position: function (pos, params, el, elRect, size) {
var obj = { top: 10 };
obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
return obj;
},
extraCssText: 'width: 170px'
},
axisPointer: {
link: { xAxisIndex: 'all' },
label: {
backgroundColor: '#777'
}
},
toolbox: {
feature: {
dataZoom: {
yAxisIndex: false
},
brush: {
type: ['lineX', 'clear']
}
}
},
brush: {
xAxisIndex: 'all',
brushLink: 'all',
outOfBrush: {
colorAlpha: 0.1
}
},
grid: [
{
left: '10%',
right: '8%',
height: '50%'
},
{
left: '10%',
right: '8%',
bottom: '20%',
height: '15%'
}
],
xAxis: [
{
type: 'category',
data: data.categoryData,
scale: true,
boundaryGap: false,
axisLine: { onZero: false },
splitLine: { show: false },
splitNumber: 20,
min: 'dataMin',
max: 'dataMax',
axisPointer: {
z: 100
}
},
{
type: 'category',
gridIndex: 1,
data: data.categoryData,
scale: true,
boundaryGap: false,
axisLine: { onZero: false },
axisTick: { show: false },
splitLine: { show: false },
axisLabel: { show: false },
splitNumber: 20,
min: 'dataMin',
max: 'dataMax',
axisPointer: {
label: {
formatter: function (params) {
var seriesValue = (params.seriesData[0] || {}).value;
return (
params.value +
(seriesValue != null
? '\n' + echarts.format.addCommas(seriesValue)
: '')
);
}
}
}
}
],
yAxis: [
{
scale: true,
splitArea: {
show: true
}
},
{
scale: true,
gridIndex: 1,
splitNumber: 2,
axisLabel: { show: false },
axisLine: { show: false },
axisTick: { show: false },
splitLine: { show: false }
}
],
dataZoom: [
{
type: 'inside',
xAxisIndex: [0, 1],
start: 98,
end: 100
},
{
show: true,
xAxisIndex: [0, 1],
type: 'slider',
top: '85%',
start: 98,
end: 100
}
],
series: [
{
name: 'Dow-Jones index',
type: 'candlestick',
data: data.values,
itemStyle: {
normal: {
color: '#06B800',
color0: '#FA0000',
borderColor: null,
borderColor0: null
}
},
tooltip: {
formatter: function (param) {
param = param[0];
return [
'Date: ' + param.name + '<hr size=1 style="margin: 3px 0">',
'Open: ' + param.data[0] + '<br/>',
'Close: ' + param.data[1] + '<br/>',
'Lowest: ' + param.data[2] + '<br/>',
'Highest: ' + param.data[3] + '<br/>'
].join('');
}
}
},
{
name: 'MA5',
type: 'line',
data: calculateMA(5, data),
smooth: true,
lineStyle: {
normal: { opacity: 0.5 }
}
},
{
name: 'MA10',
type: 'line',
data: calculateMA(10, data),
smooth: true,
lineStyle: {
normal: { opacity: 0.5 }
}
},
{
name: 'MA20',
type: 'line',
data: calculateMA(20, data),
smooth: true,
lineStyle: {
normal: { opacity: 0.5 }
}
},
{
name: 'MA30',
type: 'line',
data: calculateMA(30, data),
smooth: true,
lineStyle: {
normal: { opacity: 0.5 }
}
},
{
name: 'Volumn',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
data: data.volumns
}
]
}),
true
);
});
stock-DJI.json 部分数据
[
[
"2004-01-02",
10452.74,
10409.85,
10367.41,
10554.96,
168890000
],
[
"2004-01-05",
10411.85,
10544.07,
10411.85,
10575.92,
221290000
],
[
"2004-01-06",
10543.85,
10538.66,
10454.37,
10584.07,
191460000
],
[
"2004-01-07",
10535.46,
10529.03,
10432,
10587.55,
225490000
],
[
"2004-01-08",
10530.07,
10592.44,
10480.59,
10651.99,
237770000
],
[
"2004-01-09",
10589.25,
10458.89,
10420.52,
10603.48,
223250000
],
[
"2004-01-12",
10461.55,
10485.18,
10389.85,
10543.03,
197960000
],
[
"2004-01-13",
10485.18,
10427.18,
10341.19,
10539.25,
197310000
],
[
"2004-01-14",
10428.67,
10538.37,
10426.89,
10573.85,
186280000
],
[
"2004-01-15",
10534.52,
10553.85,
10454.52,
10639.03,
260090000
],
[
"2004-01-16",
10556.37,
10600.51,
10503.7,
10666.88,
254170000
],
[
"2004-01-20",
10601.4,
10528.66,
10447.92,
10676.96,
224300000
],
[
"2004-01-21",
10522.77,
10623.62,
10453.11,
10665.7,
214920000
],
[
"2004-01-22",
10624.22,
10623.18,
10545.03,
10717.4,
219720000
],
[
"2004-01-23",
10625.25,
10568.29,
10490.14,
10691.77,
234260000
],
[
"2004-01-26",
10568,
10702.51,
10510.44,
10725.18,
186170000
],
[
"2004-01-27",
10701.1,
10609.92,
10579.33,
10748.81,
206560000
],
[
"2004-01-28",
10610.07,
10468.37,
10412.44,
10703.25,
247660000
],
[
"2004-01-29",
10467.41,
10510.29,
10369.92,
10611.56,
273970000
],
[
"2004-01-30",
10510.22,
10488.07,
10385.56,
10551.03,
208990000
],
[
"2004-02-02",
10487.78,
10499.18,
10395.55,
10614.44,
224800000
],
[
"2004-02-03",
10499.48,
10505.18,
10414.15,
10571.48,
183810000
],
[
"2004-02-04",
10503.11,
10470.74,
10394.81,
10567.85,
227760000
],
[
"2004-02-05",
10469.33,
10495.55,
10399.92,
10566.37,
187810000
],
[
"2004-02-06",
10494.89,
10593.03,
10433.7,
10634.81,
182880000
],
[
"2004-02-09",
10592,
10579.03,
10433.7,
10634.81,
160720000
],
[
"2004-02-10",
10578.74,
10613.85,
10511.18,
10667.03,
160590000
],
[
"2004-02-11",
10605.48,
10737.7,
10561.55,
10779.4,
277850000
],
[
"2004-02-12",
10735.18,
10694.07,
10636.44,
10775.03,
197560000
],
[
"2004-02-13",
10696.22,
10627.85,
10578.66,
10755.47,
208340000
],
[
"2004-02-17",
10628.88,
10714.88,
10628.88,
10762.07,
169730000
],
[
"2004-02-18",
10706.68,
10671.99,
10623.62,
10764.36,
164370000
],
[
"2004-02-19",
10674.59,
10664.73,
10626.44,
10794.95,
219890000
],
[
"2004-02-20",
10666.29,
10619.03,
10559.11,
10722.77,
220560000
],
[
"2004-02-23",
10619.55,
10609.62,
10508.89,
10711.84,
229950000
],
[
"2004-02-24",
10609.55,
10566.37,
10479.33,
10681.4,
225670000
],
[
"2004-02-25",
10566.59,
10601.62,
10509.4,
10660.73,
192420000
],
[
"2004-02-26",
10598.14,
10580.14,
10493.7,
10652.96,
223230000
],
[
"2004-02-27",
10581.55,
10583.92,
10519.03,
10689.55,
200050000
],
[
"2004-03-01",
10582.25,
10678.14,
10568.74,
10720.14,
185030000
],
[
"2004-03-02",
10678.36,
10591.48,
10539.4,
10713.92,
215580000
],
[
"2004-03-03",
10588.59,
10593.11,
10506.66,
10651.03,
188800000
],
[
"2004-03-04",
10593.48,
10588,
10522.59,
10645.33,
161050000
],
[
"2004-03-05",
10582.59,
10595.55,
10497.11,
10681.4,
223550000
],
[
"2004-03-08",
10595.37,
10529.48,
10505.85,
10677.85,
199300000
],
[
"2004-03-09",
10529.52,
10456.96,
10391.48,
10567.03,
246270000
]
]
重要部分
实现联动
axisPointer: {
link: { xAxisIndex: 'all'},
label: {
backgroundColor: '#777'
}
},
官网说明:https://echarts.apache.org/v4/zh/option.html#axisPointer.link
注意:这李的link部分
实现提示框原理鼠标
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
},
position: function (pos, params, el, elRect, size) {
var obj = { top: 10 };
obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
return obj;
},
extraCssText: 'width: 170px'
},
可能存在的问题
如果上下两部分使用的是同一X轴数据,结果鼠标划上去以后,十字交叉线却显示在不同位置
由于X轴一样,上图中的1,2应该是一条线,如下所示:
- 先检查X轴赋予的数据是否相同
- 检查放缩块区间是否一致,如下代码是错误的,放缩区域不一样,那么肯定不在一条线!
[{
// 用于区域缩放
type: 'inside',
start: 50,
end: 70
}, {
show: true,
type: 'slider',
y: '90%',
start: 50,
end: 100
}, {
show: false,
xAxisIndex: [0, 1],
type: 'slider',
start: 20,
end: 100
}]
改为正确的
dataZoom: [{
// 用于区域缩放
type: 'inside',
start: 50,
end: 70
}, {
show: true,
type: 'slider',
y: '90%',
start: 50,
end: 70
}, {
show: false,
xAxisIndex: [0, 1],
type: 'slider',
start: 50,
end: 70
}],