• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

    echarts中關于自定義legend圖例文字

    2021-8-16    前端達人

    文章摘自:https://blog.csdn.net/YPJMFC/article/details/78979319,非常感謝大牛分享。

    echarts中關于自定義legend圖例文字
    首先看一張echarts餅圖: 
     
    這張圖很好做,根本不值得提,但是用過echarts的可能會發現這個圖例有點不一樣,做這個圖例花了我好幾個小時去查,去試。結合一下echarts中legend圖例的特質我們分析一下一些難點:

    1.這里的圖例文本包含兩個變量,而formatter提供的變量模板只有name
    2.兩個變量的樣式各不相同
    3.對齊,換行與居中的應用



    一個個看:

    1.兩個變量
    formatter有兩種形式: 
    - 模板 
    - 回調函數

    模板

    使用字符串模板,模板變量為圖例名稱 {name}
    formatter: 'Legend {name}'

    這種想要修改name的值,暫時我做不到,歡迎讀者指正

    回調函數

    使用回調函數
    formatter: function (name) {
        return 'Legend ' + name;
    }

    我們在返回時可以對name進行修改,從而返回我們需要的值,初步改動是這樣:

    var data = [
        {value:40, name:'貨幣'},
        {value:20, name:'股票'},
        {value:40, name:'債券'}
    ]
    formatter:  function(name){
        var total = 0;
        var target;
        for (var i = 0, l = data.length; i < l; i++) {
        total += data[i].value;
        if (data[i].name == name) {
            target = data[i].value;
            }
        }
        return name + ' ' + ((target/total)*100).toFixed(2) + '%';
    }


    2.兩種樣式
    想自定義圖例文字樣式,就要用到富文本:rich,但是在官方文檔中看到的只有模板形式的富文本樣式配置,由1知用模板很難實現自定義name,所以只能用回調函數形式,采用富文本的形式對name進行改造:

    formatter:  function(name){
        var total = 0;
        var target;
        for (var i = 0, l = data.length; i < l; i++) {
        total += data[i].value;
        if (data[i].name == name) {
            target = data[i].value;
            }
        }
        var arr = [
            '{a|'+((target/total)*100).toFixed(2)+'%}',
            '{b|'+name+'}',
        ]
        return arr.join('\n')
    },
    textStyle:{
        rich:{
            a:{
                fontSize:20,
                verticalAlign:'top',
                align:'center',
                padding:[0,0,28,0]
            },
            b:{
                fontSize:14,
                align:'center',
                padding:[0,10,0,0],
                lineHeight:25
            }
        }
    }

    3.對齊,換行與居中
    為了圖例與第一行文字對齊,需要設置兩個樣式的padding,把文字頂到合適的位置,然后為了上下行的間隔,設置了第2行文字的行高,最終呈現了上面圖片的效果。不知道是不是有點地方做煩了,但是能最終實現自己想要的效果,很有成就感。

    4.實例
    這是完整的組件:

    class ConfigChart extends Component {

        constructor(props) {
            super(props);
            this.state = {};
        };
        getOption = () => {
            var data = [
                {value:40, name:'貨幣'},
                {value:20, name:'股票'},
                {value:40, name:'債券'}
            ]
            const option = {
                tooltip : {
                    trigger: 'item',
                    formatter: "{a} <br/> : {c} (2mmmm0mmmm%)"
                },
                // formatter:  function(name){

                //     var total = 0;
                //     var target;
                //     for (var i = 0, l = data.length; i < l; i++) {
                //     total += data[i].value;
                //     if (data[i].name == name) {
                //     target = data[i].value;
                //     }
                //     }
                //     return name + ' ' + ((target/total)*100).toFixed(2) + '%';
                // },

                series: [
                    {
                        name: '訪問來源',
                        type: 'pie',
                        radius: [50, 80],
                        center: ['50%', '40%'],
                        label: {
                            normal: {
                                show: false
                            },
                            emphasis: {
                                show: false
                            }
                        },
                        data: [
                            {
                                value: 40,
                                name: '貨幣',
                                itemStyle: { normal: { color: "#5877F0" } }
                            },
                            { value: 20, name: '股票', itemStyle: { normal: { color: "#AA9FFD" } } },
                            { value: 40, name: '債券', itemStyle: { normal: { color: "#F96481" } } }
                        ]
                    }
                ],
                legend: {
                    x: 'center',
                    // y: 'bottom',
                    bottom:5,
                    itemGap:30,
                    itemWidth:5,
                    textStyle:{
                        fontSize: 12
                    },
                    align:'left',
                    data: [
                        {
                            name:'貨幣',
                            icon:'circle'
                        },
                        {
                            name:'股票',
                            icon:'circle'
                        },{
                            name:'債券',
                            icon:'circle'
                        }
                    ],
                    // formatter:'{a|{name}}\n{name}',
                    formatter:  function(name){
                        var total = 0;
                        var target;
                        for (var i = 0, l = data.length; i < l; i++) {
                        total += data[i].value;
                        if (data[i].name == name) {
                            target = data[i].value;
                            }
                        }
                        var arr = [
                            '{a|'+((target/total)*100).toFixed(2)+'%}',
                            '{b|'+name+'}',
                        ]
                        // return name + ' ' + ((target/total)*100).toFixed(2) + '%';
                        return arr.join('\n')
                    },
                    textStyle:{
                        rich:{
                            a:{
                                fontSize:20,
                                verticalAlign:'top',
                                align:'center',
                                padding:[0,0,28,0]
                            },
                            b:{
                                fontSize:14,
                                align:'center',
                                padding:[0,10,0,0],
                                lineHeight:25
                            }
                        }
                    }
                },
                backgroundColor: "#fff"
            };
            return option;
        };
        render() {
            const _this = this;
            const { isShow } = this.props;
            return isShow ?
                <div className={StyleClass.configChartWrapper}>
                    <ReactEcharts
                        option={_this.getOption()}
                        echarts={echarts}
                        style={{ height: '265px', width: $.width() }}
                        className='react_for_echarts' />
                </div> : null;
        }

    }
    其實大神上面的數據還是有點問題,按照大神這樣做的話,餅狀圖的百分比和算出來的有一點點出入(算出來的值加起來不夠百分百),其實就是最后一項的百分比和餅狀圖的不一樣,其他的都一樣,所以,我自己修改了幾個小時,終于把它完善了(主要是綠色的代碼),代碼如下:

    this.dateEchart.setOption({

    color:['#4BC373','#4178E8','#FF5B57'],

                 tooltip: {

    trigger: 'item',

    formatter: "{a} <br/>: {c} (2mmmm0mmmm%)"

    },

    legend: {

    orient: 'vertical',

    right:'10%',

    top:'40%',

    data:['微信支付','支付寶網上支付','銀行支付'],

    formatter:(name)=>{

    let target,count;

    let total=0,num=0;

    let l=this.data2.length;

    for(var i=0;i<l;i++){

    total+=this.data2[i].value;

    }

    for(i=0;i<l;i++){

    if((this.data2[i].name==name)&&(i<l-1)){

    target=this.data2[i].value;

    count=((target/total)*100).toFixed(2)+'%';

    return name+': '+count;

    }

    if((this.data2[i].name==name)&&(i==l-1)){

    for(i=0;i<l-1;i++){

    num+=parseFloat((((this.data2[i].value)/total)*100).toFixed(2));

    }

    let yy=(100-num).toFixed(2);

    return name+': '+yy+'%';

    }

    }

    }

    },

    series: [

    {

    name:'訪問來源',

    type:'pie',

    radius: ['40%', '60%'],

    center:['40%','50%'],

    avoidLabelOverlap: false,

    label: {

    normal: {

    show: false,

    position: 'center'

    },

    emphasis: {

    show: true,

    textStyle: {

    fontSize: '30',

    fontWeight: 'bold'

    }

    },

    },

    labelLine: {

    normal: {

    show: false

    }

    },

    data:this.data2

    }

    ]

             });


    藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

    文章來源:csdn

    分享此文一切功德,皆悉回向給文章原作者及眾讀者.
    免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

    藍藍設計www.lzhte.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

    日歷

    鏈接

    個人資料

    藍藍設計的小編 http://www.lzhte.cn

    存檔

    主站蜘蛛池模板: 热思思久久免费视频| 91精品国产综合久久久蜜臀酒店| 老司机午夜精品视频无码| 国产无人区码一区二区| 亚洲AV成人综合五月天在线观看| 真实播放国产乱子伦视频| 国产欧美一区二区成人影院| 亚洲AV综合A∨一区二区| 久久狼人大香伊蕉国产| 极品人妻少妇一区二区| 18禁黄无遮挡网站免费| 国产voyeur精品偷窥222| 黄骅市| 国产精品最新免费视频| 特黄精品毛片在线观看| 亚洲日韩亚洲另类激情文学一| 白沙| 青青草免费在线播放视频五月天| 女人的天堂av青青草| 久久亚洲精品成人综合| 国产精品亚洲第一区广西莫菁| www.yw193| 97精品国产福利一区二区三区| 国产日韩久久久久69影院| 欧美久久久久中文字幕| 伊人久久大香线蕉综合色狠狠 | 黑人与人妻无码中字视频| 米奇精品一区二区三区| 亚洲精品一本之道高清乱码| 又色又爽又黄又无遮挡的网站| 精品久久久噜噜噜久久久| 狼友专区| av制服丝袜白丝国产网站| 嫩草视屏| 欧洲一级无码AV毛片免费| 深夜福利导航| 亚洲VA中文字幕无码一区| yy6080影院理论一级久久| 91久久人澡人妻天天做天天爽| 精品免费视频| 久久精品国产一区二区蜜芽|