国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        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/>{b} : {c} (xhhjn7xljfrd%)"
                    },
                    // 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/>{b}: {c} (xhhjn7xljfrd%)"

        },

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

        日歷

        鏈接

        個人資料

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

        存檔

        主站蜘蛛池模板: 最新欧美精品一区二区三区| 精品成人av一区二区三区在线| 亚洲人成无码网站久久99热国产| 国产精品免费精品自在线观看| 老鸭窝在线视频| 欧美国产日韩a在线视频| 永善县| 鄂伦春自治旗| gogo少妇无码肉肉视频| 亚洲欧美日韩综合在线网站 | av无码免费看| 大肉大捧一进一出视频出来呀| 精精国产xxx在线观看| 1313久久国产午夜精品理论片| 天天av天天翘天天综合网色鬼| 一个人在线观看免费中文www| 成人性生交大片免费| 国产成人亚洲精品无码h在线 | 久久久久亚洲av成人人电影| 自拍偷自拍亚洲精品熟妇人| 两个人免费视频全集在线观看| 免费人成视频在线观看免费尤物 | yw尤物av无码国产在线观看| 灌阳县| 一个人看的www高清视频| 夜夜爽一区二区三区精品| 伊人久久亚洲综合影院首页| 人与禽性7777777| 亚洲欧美自拍偷一区二区 | 丰满少妇高潮惨叫久久久| 综合成人亚洲偷自拍色| 免费人成网ww555kkk在线| 小sao货揉揉你的奶真大电影| 都市激情校园春色| 人妻在卧室被老板疯狂进入| 国产精品免费高清在线观看| 丹棱县| 鲁一鲁一鲁一鲁一澡| 久久久久88色偷偷| 四虎永久在线精品免费一区二区| 两个人的免费视频|