97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

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

2021-8-16    前端達人

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

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

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



一個個看:

1.兩個變量
formatter有兩種形式: 
- 模板 
- 回調(diào)函數(shù)

模板

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

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

回調(diào)函數(shù)

使用回調(diào)函數(shù)
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知用模板很難實現(xiàn)自定義name,所以只能用回調(diào)函數(shù)形式,采用富文本的形式對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,把文字頂?shù)胶线m的位置,然后為了上下行的間隔,設置了第2行文字的行高,最終呈現(xiàn)了上面圖片的效果。不知道是不是有點地方做煩了,但是能最終實現(xiàn)自己想要的效果,很有成就感。

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} (yyyyyyyyy%)"
            },
            // 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;
    }

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

this.dateEchart.setOption({

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

             tooltip: {

trigger: 'item',

formatter: "{a} <br/>{b}: {c} (yyyyyyyyy%)"

},

legend: {

orient: 'vertical',

right:'10%',

top:'40%',

data:['微信支付','支付寶網(wǎng)上支付','銀行支付'],

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設計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯(lián)系。

文章來源:csdn

分享此文一切功德,皆悉回向給文章原作者及眾讀者.
免責聲明:藍藍設計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

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

日歷

鏈接

個人資料

藍藍設計的小編 http://www.0391cbd.com

存檔

主站蜘蛛池模板: 国产激情影院| 国产精品自在拍首页视频8| 免费国产小视频在线观看| 丰满的少妇人妻无码区| 青青青草国产| 国产在线观看精品| 亚洲福利片无码最新在线播放| 精品国产aⅴ一区二区三区| 日韩久草视频| a毛片免费看| 日韩毛片免费观看| 97精品伊人久久大香线蕉| 精品99在线观看| 国产簧片免费在线播放| 国产欧美日韩另类精彩视频| 亚洲区欧美区| 视频一区视频二区日韩专区| 九九线精品视频在线观看| 亚洲va在线∨a天堂va欧美va| 第一页亚洲| 特级欧美视频aaaaaa| 亚洲色图欧美视频| 欧美福利在线| 日韩欧美中文在线| 国产精品分类视频分类一区| 国产色伊人| 国产一区二区三区视频| 国产成人狂喷潮在线观看2345| 久久96热在精品国产高清| 国产网站免费看| 国产福利免费视频| 国产综合另类小说色区色噜噜 | 91成人精品视频| a级毛片免费在线观看| 欧美日韩久久综合| 欧美精品在线免费| 欧美精品啪啪一区二区三区| 手机精品视频在线观看免费| 日本尹人综合香蕉在线观看| 国产午夜人做人免费视频中文| 一级成人欧美一区在线观看| 国产成人一二三| 99成人在线观看| 91九色国产在线| 亚洲天堂视频在线免费观看| 国产尹人香蕉综合在线电影 | 国内精品久久久久久久久久影视| 中文字幕永久在线看| 亚洲中文字幕av无码区| a级毛片网| 18禁影院亚洲专区| 亚洲男人的天堂在线观看| 亚洲综合网在线观看| 欧美日韩一区二区三| 久久永久精品免费视频| 国产SUV精品一区二区| 日韩在线视频网| 中文字幕有乳无码| 性色生活片在线观看| 亚洲天堂网2014| 精品国产成人国产在线| 国产精品久久自在自线观看| 91麻豆久久久| 亚洲有无码中文网| 日韩午夜福利在线观看| 热99精品视频| 国产伦片中文免费观看| 亚洲码在线中文在线观看| 无码专区第一页| 91区国产福利在线观看午夜| 国模沟沟一区二区三区| 尤物视频一区| 久久综合国产乱子免费| 国产综合欧美| 天天躁狠狠躁| 国产屁屁影院| 欧美精品成人| 亚洲av无码专区久久蜜芽| 精品91自产拍在线| 九九热精品免费视频| 成人综合在线观看| 色婷婷久久|