Echarts的formatter用法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


介绍

formatter 是ECharts 的一个配置项,允许图表的组件(如坐标轴标签、提示框(tooltip)内容、图例标签等)显示高度定制化、可以动态变化的内容。

基本用法

formatter 的值可以是一个字符串模板,也可以是一个回调函数。

字符串模板

字符串模版允许使用预定义的变量插入数据,使用标准占位符来表示变量:{a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。 在 trigger'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。 不同图表类型下的{a},{b},{c},{d}含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:

折线(区域)图、柱状(条形)图、K线图 :{a}(系列名称),{b}(类目值),{c}(数值), {d}(无)

散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)

地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)

饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)

比如将数值轴上的数字格式化为带有单位的字符串:

yAxis: {  
    type: 'value',  
    axisLabel: {  
        formatter: '{value} 元'  
    }  
}

回调函数

回调函数接收一个或多个参数,这些参数包含了当前数据点的信息,你可以根据这些信息来构造返回的字符串。

(params: 
	Object|Array, 
	ticket: string, 
	callback: (ticket: string, html: string)
) => string

参数:

  • params: Object|Array包含了当前数据点的详细信息,包括值(value)、系列名称(seriesName)、类目值(name或category)等,在每一个配置项中表示不同内容,可以打印看看。
  • ticket: string不进行异步操作(如从服务器获取数据),可以忽略这个参数。
  • callback: (ticket: string, html: string) => void这个回调函数允许你在异步操作完成后,将生成的HTML内容或字符串返回给ECharts进行显示。

返回值是一个用来表示显示内容的字符串。

示例1:

假设你想要根据数据点的值来显示不同的文本:

formatter: function (params) {  
    return params.name + ': ' + params.value + ' 个';  
}

formatter函数接收对象包含了当前数据点的name和value属性。函数返回一个字符串用于在提示框中显示。

实例2:

假设我们有一个柱状图,需要在提示框里显示这一列所有的具体数值和百分比:

tooltip: {  
    trigger: 'axis',  
    formatter: function (params) {  
        // params 是一个数组,包含了每个数据点的信息  
        let res = params.map(item => {  
            return `${item.seriesName}<br/>${item.name}: ${item.value} (${item.percent}%)`;  
        });  
        return res.join('<br>');  
    }  
}

实例3:

使用回调函数来根据数值大小改变颜色:

yAxis: {  
    type: 'value',  
    axisLabel: {  
        formatter: function (value) {  
            if (value > 1000) {  
                return `${value} 元 <span style="color:red;">(高)</span>`;  
            } else {  
                return `${value} 元 <span style="color:green;">(低)</span>`;  
            }  
        }  
    }  
}

注意:

  1. 虽然 HTML 标签在 ECharts 的某些地方(如 tooltip)是支持的,但在 axisLabel 中直接插入 HTML 可能不会被渲染,这取决于 ECharts 的版本和配置。
  2. 用字符串写的html元素使用样式时只能用style,用class识别不了

实例4:
展示一个较为复杂的提示框:

      const dataDisplay = card.map((item: any, index: number) => {
        const text = textStyle('#222', '400', 12)
        const colorDiv = `<div style="${itemStyle(120, 0)}"><span style="${textStyle(lineColor[index], '800', 18)}">◼︎</span><span style="${text}">${item.title}<span></div>`
        const dataDiv = `<div style="${itemStyle(66, 0)}${text}backgroundColor:${lineColor[index]};">${params[index].data}${item.unit}</div>`
        const ringDiv = `<div style="${itemStyle(66, 0)}">${showMetric(rate)}</div>`
        const yearRingDiv = `<div style="${itemStyle(66, 0)}">${showMetric(yearRate)}</div>`
        return `<div style="display:flex;">${colorDiv + dataDiv + ringDiv + yearRingDiv}</div>`
      }).join('')
      return titleDisplay + tableDisplay + dataDisplay
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值