echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽
需求描述
需要實現(xiàn)一個“五彩斑斕”的餅圖:每塊餅上的標(biāo)簽顏色與這塊餅的顏色一致。
實現(xiàn)思路
要改變餅圖標(biāo)簽的顏色,需要參考echarts餅圖label配置項,以及這個很棒的官方示例:餅圖引導(dǎo)線調(diào)整。從這個示例中可以了解到自定義標(biāo)簽涉及的兩個配置項:formatter(用于自定義標(biāo)簽顯示內(nèi)容)、rich(用于自定義標(biāo)簽文字顯示樣式)。
label: { formatter: '{name|}\n{time|{c} 小時}', rich: { time: { fontSize: 10, color: '#999' } } }
接下來稍微講解下上面這段自定義標(biāo)簽的配置項:
formatter
比較簡單的標(biāo)簽內(nèi)容可以通過使用echarts標(biāo)簽字符串模板實現(xiàn)(個人感覺理解起來類似于JS模板字符串),“{name|}\n{time|{c} 小時}”中包含兩個內(nèi)容(“”、“{c} 小時”),它們之間使用“\n”分隔。至于“{name|}”“{time|}”這種寫法,大概相當(dāng)于“<div class=‘name’></div>”、“<div class=‘time’>{c} 小時</div>”,用于為內(nèi)容指定樣式類名。
此外,還可以通過回調(diào)函數(shù)的方式手動返回formatter字符串,且回調(diào)函數(shù)中無法使用echarts標(biāo)簽字符串模板(也沒有必要使用,回調(diào)函數(shù)傳入的參數(shù)包含的數(shù)據(jù)更全),如果用回調(diào)函數(shù)生成上面的formatter字符串,可以這樣寫:
label: { formatter: params => { // console.log(params) return `{name|${params.name}}\n{time|${params.value} 小時}` }, rich: { time: { fontSize: 10, color: '#999' } } }
rich
用于為每個樣式類名配置具體樣式內(nèi)容,可以參考echarts支持的樣式配置
根據(jù)筆者的測試,有兩點需要注意:①自定義標(biāo)簽樣式必須通過在formatter中為內(nèi)容設(shè)置樣式類名并在rich中配置對應(yīng)樣式實現(xiàn);②每段內(nèi)容只能指定一個樣式類名
參考代碼
根據(jù)以上分析,要實現(xiàn)標(biāo)簽顏色與餅塊一致,可以預(yù)先定義一個配色數(shù)組,遍歷數(shù)組為每種顏色創(chuàng)建rich樣式類名,再使用回調(diào)函數(shù)formatter為標(biāo)簽內(nèi)容指定下標(biāo)一致的樣式類名即可,具體參考代碼如下:
let pieColors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de'] let richColor = {} pieColors.forEach((item, idx) => { richColor[`color${idx}`] = { fontSize: 28, color: item } }) option = { color: pieColors, series: [ { name: 'Access From', type: 'pie', radius: ['36%', '56%'], avoidLabelOverlap: false, label: { formatter: params => { // console.log(params) return `{color${params.dataIndex}|${params.name}(${params.value})}` }, rich: richColor }, labelLine: { lineStyle: { width: 3 } }, data: [ { value: 1048, name: 'Search Engine' }, { value: 735, name: 'Direct' }, { value: 580, name: 'Email' }, { value: 484, name: 'Union Ads' }, { value: 300, name: 'Video Ads' } ] } ] };
在線運行
可以將參考代碼拷貝到這個在線示例進行調(diào)試:echarts環(huán)形圖示例
標(biāo)簽plus
現(xiàn)在增加這樣一個小需求:在剛才的圓環(huán)餅圖中心,增加展示餅圖所有數(shù)據(jù)的和,效果類似:
分析
首先想到的方案,也是筆者曾經(jīng)使用的方案:自己多寫一個div來展示圓環(huán)中心的數(shù)據(jù),但現(xiàn)在筆者有了更好的思路,便不細講了。
新的思路
其實和之前的思路差不多,只是不再自己寫一個div自己調(diào)樣式,而是利用echarts餅圖支持在圓心處展示標(biāo)簽的特性,在series中增加一個餅圖用于展示總數(shù),參考代碼如下:
let pieColors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de'] let richColor = {} pieColors.forEach((item, idx) => { richColor[`color${idx}`] = { fontSize: 28, color: item } }) let chartData = [ { value: 1048, name: 'Search Engine' }, { value: 735, name: 'Direct' }, { value: 580, name: 'Email' }, { value: 484, name: 'Union Ads' }, { value: 300, name: 'Video Ads' } ] option = { color: pieColors, series: [ { name: 'Access From', type: 'pie', radius: ['36%', '56%'], avoidLabelOverlap: false, label: { formatter: params => { // console.log(params) return `{color${params.dataIndex}|${params.name}(${params.value})}` }, rich: richColor }, labelLine: { lineStyle: { width: 3 } }, data: chartData }, { name: '數(shù)據(jù)總數(shù)', type: 'pie', radius: ['0%', '0%'], itemStyle: { // 防止鼠標(biāo)懸浮到標(biāo)簽時出現(xiàn)放大的點 color: 'transparent' }, label: { position: 'inside', formatter: `{data|{c}}\n{serie|{a}}`, rich: { data: { fontWeight: 'bold', fontSize: 64, color: `#202020`, lineHeight: 68, textBorderColor: `transparent`, textBorderWidth: 0 }, serie: { fontSize: 24, color: `#acbac6`, lineHeight: 28, textBorderColor: `transparent`, textBorderWidth: 0 } } }, labelLine: { show: false }, data: [ // 計算表格數(shù)據(jù)value總和 chartData.reduce((prev, cur) => prev + cur.value, 0) ] } ] };
小伙伴們可自行拷貝到echarts環(huán)形圖示例在線調(diào)試~☆▽☆~
(最后再多嘴一句,echarts配置項的層級非常重要?。。∪绻霈F(xiàn)了配置項“失效”的情況,可以先·仔細·對照官方文檔,排查下配置項的層級問題~)
附:解決formatter無法處理數(shù)據(jù)的問題
解決圖標(biāo)自適應(yīng)大小的問題
大家在使用echarts餅圖時,經(jīng)常遇到formatter無法處理精確數(shù)據(jù)的情況,怎么辦呢?建議在外面自定義或處理好數(shù)據(jù)pieData,然后在formatter里面使用for循環(huán)遍歷
//首先建議在外面自定義或處理好數(shù)據(jù)pieData,然后在formatter里面使用for循環(huán)遍歷 var chartPie = echarts.init(document.getElementById("charPie")); var option = { backgroundColor: "#ffffff",//背景色 legend: {//圖例配置 selectedMode: false,//取消圖例上的點擊事件 show: true,//是否顯示圖例 orient: 'vertical', x: '55%', y: '0px', right: '0px', top: 'center', data: pieData,//餅圖數(shù)據(jù) icon: "circle", itemHeight: 9,//圖例圓點的高度 formatter: function (name) { console.log(name, "打印一下name") // let arr = ["{a|" + n + "}", "{b|" + target + "%}"] //return arr.join("") }, textStyle: { rich: { a: { fontSize: 12, color: "#333", padding: 1//圖例上下的間距 } } } }, series: [{ name: '圓環(huán)圖系列名稱', // 系列名稱 type: 'pie', // 系列類型 center: ['20%', '50%'], // 餅圖的中心(圓心)坐標(biāo),數(shù)組的第一項是橫坐標(biāo),第二項是縱坐標(biāo)。[ default: ['50%', '50%'] ] radius: [34, 58], // 餅圖的半徑,數(shù)組的第一項是內(nèi)半徑,第二項是外半徑。[ default: [0, '75%'] ] hoverAnimation: false, // 是否開啟 hover 在扇區(qū)上的放大動畫效果。[ default: true ] label: { // 餅圖圖形上的文本標(biāo)簽,可用于說明圖形的一些數(shù)據(jù)信息,比如值,名稱等. normal: { show: false // 是否顯示標(biāo)簽[ default: false ] } }, color: ['#16B6F3', '#DB3764', '#B482CE', '#F9C03D', "#44A22E", "#F39716", "#E54EB5", "#82E2D2", "#3DD5F9", "#A39D0E"], // 圓環(huán)圖各環(huán)節(jié)的顏色(順時針) data: pieData // 系列中的數(shù)據(jù)內(nèi)容數(shù)組。 }] }; // 使用剛指定的配置項和數(shù)據(jù)顯示圖表 chartPie.setOption(option) window.addEventListener("resize", function () { chartPie.resize()//圖表自適應(yīng)大小 })
效果圖如下:
參考網(wǎng)址
[3] JS模板字符串
[4] echarts支持的樣式配置
總結(jié)
到此這篇關(guān)于echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽的文章就介紹到這了,更多相關(guān)echarts餅圖標(biāo)簽formatter使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- React項目搭建與Echarts工具使用詳解
- vue+echarts封裝氣泡圖的方法
- echarts 3D地圖為區(qū)域自定義顏色的解決方法
- 在vue中使用echarts實現(xiàn)上浮與下鉆效果
- 使用GetInvalidFileNameCharts生成文件名
- 解決echarts中餅圖標(biāo)簽重疊的問題
- echarts餅圖扇區(qū)添加點擊事件的實例
- echarts餅圖指示器文字顏色設(shè)置不同實例詳解
- echarts餅圖各個板塊之間的空隙如何實現(xiàn)
- echarts實現(xiàn)餅圖與樣式設(shè)置
- 基于Echarts實現(xiàn)餅圖效果
- Vue ECharts餅圖實現(xiàn)方法詳解
- Echarts實現(xiàn)點擊列表聯(lián)動餅圖的示例代碼
相關(guān)文章
Javascript函數(shù)技巧學(xué)習(xí)
這篇文章主要介紹了Javascript函數(shù)技巧學(xué)習(xí),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-07-07javascript函數(shù)定義的幾種區(qū)別小結(jié)
本篇文章主要是對javascript函數(shù)定義的幾種區(qū)別進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01JavaScript中this的用法及this在不同應(yīng)用場景的作用解析
由于其運行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對象、當(dāng)前對象或者任意對象,這完全取決于函數(shù)的調(diào)用方式,這篇文章主要給大家介紹了JavaScript中this的用法及this在不同應(yīng)用場景的作用解析,一起看看吧2017-04-04Flutter自適用高度PageView的實現(xiàn)方案
在?Flutter?中,PageView?是一個非常常用的組件,能夠?qū)崿F(xiàn)多個頁面的滑動切換,這篇文章主要介紹了Flutter-自適用高度PageView,需要的朋友可以參考下2024-08-08