echart的series中label formatter回调函数使用及样式。

  • Post author:
  • Post category:其他


个人博客地址:

http://xurui.club/2018/08/03/echart/

今天朋友写论文用到Echart做图,但是个性化的需要不知怎么做,找我帮忙。我很久没看前端的东西了,不过Echart那玩意好像很有意思,所以就接了下来。

先看需求。



1 将紫色框部分改成自己的内容

2 将红色框内容去掉

3 将蓝色框内容改成自己定义的类别,(三种)

于是看了下代码:

app.title = '嵌套环形图';

option = {
    tooltip: {
        trigger: 'item',
        formatter: "{a} <br/>{b}: {c} ({d}%)"
    },
    legend: {
        orient: 'vertical',
        x: 'left',
        data:['直达','营销广告','搜索引擎','邮件营销','联盟广告','视频广告','百度','谷歌','必应','其他']
    },
    series: [
        {
            name:'访问来源',
            type:'pie',
            selectedMode: 'single',
            radius: [0, '30%'],

            label: {
                normal: {
                    position: 'inner'
                }
            },
            labelLine: {
                normal: {
                    show: false
                }
            },
            data:[
                {value:335, name:'直达', selected:true},
                {value:679, name:'营销广告'},
                {value:1548, name:'搜索引擎'}
            ]
        },
        {
            name:'访问来源',
            type:'pie',
            radius: ['40%', '55%'],
            label: {
                normal: {
                    formatter: '{a|{a}}{abg|}\n{hr|}\n  {b|{b}:}{c}  {per|{d}%}  ',
                    backgroundColor: '#eee',
                    borderColor: '#aaa',
                    borderWidth: 1,
                    borderRadius: 4,
                    // shadowBlur:3,
                    // shadowOffsetX: 2,
                    // shadowOffsetY: 2,
                    // shadowColor: '#999',
                    // padding: [0, 7],
                    rich: {
                        a: {
                            color: '#999',
                            lineHeight: 22,
                            align: 'center'
                        },
                        // abg: {
                        //     backgroundColor: '#333',
                        //     width: '100%',
                        //     align: 'right',
                        //     height: 22,
                        //     borderRadius: [4, 4, 0, 0]
                        // },
                        hr: {
                            borderColor: '#aaa',
                            width: '100%',
                            borderWidth: 0.5,
                            height: 0
                        },
                        b: {
                            fontSize: 16,
                            lineHeight: 33
                        },
                        per: {
                            color: '#eee',
                            backgroundColor: '#334455',
                            padding: [2, 4],
                            borderRadius: 2
                        }
                    }
                }
            },
            data:[
                {value:335, name:'直达'},
                {value:310, name:'邮件营销'},
                {value:234, name:'联盟广告'},
                {value:135, name:'视频广告'},
                {value:1048, name:'百度'},
                {value:251, name:'谷歌'},
                {value:147, name:'必应'},
                {value:102, name:'其他'}
            ]
        }
    ]
};

经过注释调试,发现需求1只要改最后一个data集合就好,把name和value换成自己自定义的内容。

而需求2 3 主要在

formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} '

这里。把、

{c}

去掉即可。

最难搞的是需求3,用了2小时搞明白的。

这里是官方文档里的介绍


http://echarts.baidu.com/option.html#grid.tooltip.formatter


formatter有两种写法:一种字符串模板,另一种是回调函数。

字符串模型里写的是,我们要改的地方是该series中name的值,这里name只能有一个值,改name是不能了,所以我们可以像改需求1那样,在data中传一个变量。用回调函数,文档中对回调函数也没有写明白。这里用简单的语言再梳理一下。主要有两点:将需要的个性化信息显示出来,然后展现出好看的样式。

第一点:

我们的个性化需求在data里写

data:[
    {value:335, name:'直达',flag:'type_1'},
    {value:310, name:'邮件营销',flag:'type_1'},
    {value:234, name:'联盟广告',flag:'type_1'},
    {value:135, name:'视频广告',flag:'type_2'},
    {value:1048, name:'百度',flag:'type_2'},
    {value:251, name:'谷歌',flag:'type_2'},
    {value:147, name:'必应',flag:'type_3'},
    {value:102, name:'其他',flag:'type_3'}
]

也就是把我们需求3的内容

type_1,type_2,type_3

写在变量flag中,然后通过回调函数取出来,这里谁回调的先不管。

回调函数的写法:

 formatter:function(params){ 
    str =  params.data.flag+ params.name+params.percent
    return str
},

这里params就是我们的data,一条一条往里传。

看效果:


可以看到,内容改过了,就是丑了点。我们想改成原来的样子怎么办呢?这里正是官方文档中最让我头疼的,找了半天没找到,在网上也不找到解释的比较好的。

我们套用原有样式,只需要把我们的参数

params.name

这种替换到原来

{a}

这种的位置,我们的参数和其他内容用

+

连接。如下:

 formatter:function(params){ 
    str = '{a|'+ params.data.flag + '}{abg|}\n{hr|}\n  {b|'+params.name+':} {per|'+params.percent + '%}'
    return str
},
// {a| 这种表示a样式,而{a}这种有固定的含义,{a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比),样式里有条竖杠!记得区分。

最终效果:



版权声明:本文为u010976347原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。