echart的tooltip展示个性化数据

需求:要求没有提示框时展示数据,有提示框时展示出每年的每个周的最后一天的值,且分别显示每一年的每个周的最后一天的日期。如图:

 但是,x轴只需要展示第几周。

 

步骤:

  1. series中的data存放的是各个点的数值,是一个数组
  2. 用series中的name来存放每一年的每一个数值对应的那个周末的具体日期。
  3. 所以最后series
    // 处理后端数据,将值存在一个数组中,将值对应的周末放在另一个数组中
    const data = [
        {
            "Name": "2021",
            "Points": [
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
             
            ]
        },
        {
            "Name": "2022",
            "Points": [
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
               
            ]
        },
        {
            "Name": "2023",
            "Points": [
                64.4,
                75.6,
                50.6,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                67.7,
                
            ]
        }
    ]
    const nameList = [
        [
            "2021-01-03",
            "2021-01-10",
            "2021-01-17",
            "2021-01-24",
            "2021-01-31",
            "2021-02-07",
            "2021-02-14",
            "2021-02-21",
            "2021-02-28",
            "2021-03-07",
            "2021-03-14",
            "2021-03-21",
            "2021-03-28",
            "2021-04-04",
            "2021-04-11",
            "2021-04-18",
            "2021-04-25",
            "2021-05-02",
            "2021-05-09",
            "2021-05-16",
            "2021-05-23",
            "2021-05-30",
            "2021-06-06",
            "2021-06-13",
            "2021-06-20",
            "2021-06-27",
            "2021-07-04",
            "2021-07-11",
            "2021-07-18",
            "2021-07-25",
            "2021-08-01",
            "2021-08-08",
            "2021-08-15",
            "2021-08-22",
            "2021-08-29",
            "2021-09-05",
            "2021-09-12",
            "2021-09-19",
            "2021-09-26",
            "2021-10-03",
            "2021-10-10",
            "2021-10-17",
            "2021-10-24",
            "2021-10-31",
            "2021-11-07",
            "2021-11-14",
            "2021-11-21",
            "2021-11-28",
            "2021-12-05",
            "2021-12-12",
            "2021-12-19",
            "2021-12-26"
        ],
        [
            "2022-01-02",
            "2022-01-09",
            "2022-01-16",
            "2022-01-23",
            "2022-01-30",
            "2022-02-06",
            "2022-02-13",
            "2022-02-20",
            "2022-02-27",
            "2022-03-06",
            "2022-03-13",
            "2022-03-20",
            "2022-03-27",
            "2022-04-03",
            "2022-04-10",
            "2022-04-17",
            "2022-04-24",
            "2022-05-01",
            "2022-05-08",
            "2022-05-15",
            "2022-05-22",
            "2022-05-29",
            "2022-06-05",
            "2022-06-12",
            "2022-06-19",
            "2022-06-26",
            "2022-07-03",
            "2022-07-10",
            "2022-07-17",
            "2022-07-24",
            "2022-07-31",
            "2022-08-07",
            "2022-08-14",
            "2022-08-21",
            "2022-08-28",
            "2022-09-04",
            "2022-09-11",
            "2022-09-18",
            "2022-09-25",
            "2022-10-02",
            "2022-10-09",
            "2022-10-16",
            "2022-10-23",
            "2022-10-30",
            "2022-11-06",
            "2022-11-13",
            "2022-11-20",
            "2022-11-27",
            "2022-12-04",
            "2022-12-11",
            "2022-12-18",
            "2022-12-25"
        ],
        [
            "2023-01-08",
            "2023-01-15",
            "2023-01-22",
            "2023-01-29",
            "2023-02-05",
            "2023-02-12",
            "2023-02-19",
            "2023-02-26",
            "2023-03-05",
            "2023-03-12",
            "2023-03-19",
            "2023-03-26",
            "2023-04-02",
            "2023-04-09",
            "2023-04-16",
            "2023-04-23",
            "2023-04-30",
            "2023-05-07",
            "2023-05-14",
            "2023-05-21",
            "2023-05-28",
            "2023-06-04",
            "2023-06-11",
            "2023-06-18",
            "2023-06-25",
            "2023-07-02"
        ]
    ]
    data.map((item,index) => {
        series.push(
        {
            data: item.Points,
            type: 'line',
            name: nameList[index].join(','), //因为name只能是字符串,先将一整年的转化为一个字符串
            label: {
              // 设置值的样式
              show: true,
              rotate: 45,
              position: 'right',
              fontWeight: 'bolder',
              color: 'balck',
            },
            symbol: 'circle', // 空心圆变实心
            symbolSize: 6, //设定实心点的大小
            itemStyle: {
              normal: {
                color: '#B22222', // 圆点的颜色
                lineStyle: {
                  color: '#B22222',
                  width: 1,
                },
              },
            },
            
            markArea: {
              //标记区域
              
            },
          });
        }
        )
    }
    
    let option;
    option = {
    title: {
            text: '',
            subtextStyle: {
              fontSize: 14,
              fontWeight: 'bold',
            },
            left: '9%',
          },
          tooltip: {
            trigger: 'axis',
            formatter: function(params) {
            // params.seriesName的值就是上面传的seresName的字符串
              let el = '';
              let html = '';
              (params || []).forEach((v, i) => {
                // console.log(v,"vvv")
                html +=
                  '<div style="display: flex; justify-content: space-between">' +
                  '<span>' +
                  v.marker +
                  v.seriesName.split(',')[v.dataIndex] + 
                // 将字符串转为数组,v.dataIndex就是这个周在数组中的index,根据dataIndex就能寻找到对应的那一周
                  '</span>' +
                  '<span style="padding-left: 20px">' +
                  `${v.value}` +
                  '</span>' +
                  '</div>';
                el = '<div >' + '<div>' + v.axisValue + '</div>' + html + '</div>';
              });
              return el;
            },
          },
    
    }
    

    但是这样有个问题,是legend不显示了,因为legend跟series的name属性是相关的,即legend应该是所有的name的集合,所以,不通过name传递后端数据。

  4. data.map((item) => {
          lenged.push(item.Name);
          series.push({
            data: item.Points,
            type: 'line',
            name: item.Name, // name应该是legend的子集
            label: {
              // 设置值的样式
              show: true,
              rotate: 45,
              position: 'right',
              fontWeight: 'bolder',
              color: 'balck',
            },
            symbol: 'circle', // 空心圆变实心
            symbolSize: 6, //设定实心点的大小
            itemStyle: {
              normal: {
         
                lineStyle: {
                 
                  width: 1,
                },
              },
            },
            markLine: {
              symbol: ['none', 'none'], // 去掉箭头
              label: {
                position: 'start',
              },
              lineStyle: {
                type: 'solid',
                width: 1,
                color: 'black',
              },
              data: [
               
              ],
            },
            markArea: {
              //标记区域
              data: [
               
            },
          });
    
        });

  5. tooltip: {
            trigger: 'axis',
            formatter: function(params) {
              let el = '';
              let html = '';
              (params || []).forEach((v, i) => {
                html +=
                  '<div style="display: flex; justify-content: space-between">' +
                  '<span>' +
                  v.marker +
                  toJS(nameList)[v.seriesIndex][v.dataIndex] +
                // 直接在tooltip中使用,seriesIndex对应的是第几年,dataIndex对应的刚好是第几周
                  '</span>' +
                  '<span style="padding-left: 20px">' +
                  `${v.value}` +
                  '</span>' +
                  '</div>';
                el = '<div >' + '<div>' + v.axisValue + '</div>' + html + '</div>';
              });
              return el;
            },
          },

    完美解决!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值