在ECharts中,使用tooltip下的formatter动态处理数据,单位换算,添加不同的单位(单位为['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB)

本文介绍如何在ECharts的Tooltip中使用自定义函数来格式化显示的数据,并提供了一个具体的实现示例,包括如何处理数值并添加合适的单位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在tooltip下的formatter中可以调用我们自己封装的函数,我们打印出来发现,value其实是所有的信息集合,而我们可以选择自己所需要的数据进行处理。根据后台返回的数据,我们直接在echarts显示层处理数据。

先上代码:

tooltip: {
    trigger: 'axis',
    formatter: function(value){
        //这里的value[0].value就是我需要每次显示在图上的数据
        if (value[0].value <= 0) {
            value[0].value = '0B';
        }
        else{
            var k = 1024;
            var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
            //这里是取自然对数,也就是log(k)(value[0].value),求出以k为底的多少次方是value[0].value
            var c = Math.floor(Math.log(value[0].value) / Math.log(k));
            value[0].value = (value[0].value / Math.pow(k, c)).toPrecision(3) + ' ' + sizes[c];
        }
        //这里的value[0].name就是每次显示的name
        return value[0].name +"<br/>"+"流量为:"+value[0].value;
     }
          }

但其实想要最终的目的是将整个处理数据添加单位的过程封装在一个方法中,在formatter中调用这个函数,

总结一下,考虑代码优化问题,主要有两个方法:

(1)在接收后端数据的时候就调用封装的方法把数据处理完成后再返回给formatter中。

(2)在formatter中调用函数,可以这样写:

     

var self = this;
//在formatter中调用method里封装的方法
formatter: function(value){
    //其中data_addition_unit为我们自己封装的数据处理方法
    value[0].value = self.data_addition_unit(value[0].value)
    return value[0].name +"<br/>"+"流量为:"+value[0].value;
}

//在data_addition_unit方法中:
methods: {
    data_addition_unit(value){
        if (value <= 0) {
            value = '0B/s';
        }
        else{
            var k = 1024;
            var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
            var c = Math.floor(Math.log(value) / Math.log(k));
            value = (value / Math.pow(k, c)).toFixed(2) + ' ' + sizes[c] + '/s';
        }
            return value
    },
}

 

### ECharts Tooltip Formatter 使用接口返回的数据ECharts中,`tooltip.formatter` 支持函数形式,这使得动态加载并显示来自服务器端的数据成为可能。通过异步请求获取数据,并将其应用到 `formatter` 函数内来定制提示框的内容。 当需要利用接口返回的数据填充工具提示时,可以在初始化表前发起 AJAX 请求取得所需信息,并存储在一个全局对象或闭包环境中供后续调用。下面是一个简单的例子说明如何实现这一点: ```javascript // 假设这是从API获得的数据结构 let apiData = {}; fetch('/api/data') // 替换为实际的API地址 .then(response => response.json()) .then(data => { apiData = data; // 将接收到的数据保存起来 initChart(); }); function initChart() { var myChart = echarts.init(document.getElementById('main')); option = { xAxis: {}, yAxis: {}, series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20], itemStyle: { color: function(params) { return params.value > 30 ? '#FF0000' : '#1890ff'; } }, emphasis: { focus: 'series' } }] }; myChart.setOption(option); myChart.on('mouseover', function (params) { const dataIndex = params.dataIndex; // 动态构建HTML内容 let htmlContent = `<div style="border-bottom: 1px solid rgba(255,255,255,.3); padding: 8px 10px; font-size: 14px;">${apiData[dataIndex].name}</div>`; Object.keys(apiData[dataIndex]).forEach(key => { if (key !== "name") { htmlContent += `<div style="padding: 5px 10px">${key}: ${apiData[dataIndex][key]}</div>`; } }); myChart.setOption({ tooltip: { show: true, formatter: () => htmlContent } }); }); } ``` 上述代码展示了如何先通过 Fetch API 获取远程资源,再基于这些数据创建个性化的 ToolTip 显示效果[^1]。每当鼠标悬停于某个柱状条之上时,都会触发一次重新渲染带有新内容的 ToolTip[^2]。 值得注意的是,在真实项目开发过程中应当考虑错误处理机制以及性能优化措施,比如缓存已加载过的数据以减少不必要的网络请求次数等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值