Echarts 同一实例中在提示框中同时显示不同图表的数据

效果

文字说不清楚,看图。就是同一个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
    }],
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值