欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽

 更新時間:2022年12月08日 11:34:38   作者:某只雜魚  
項目中有遇到需要使用餅圖展示每種狀態(tài)所占比例,去echarts官網(wǎng)學(xué)習(xí)了一番,下面這篇文章主要給大家介紹了關(guān)于echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽的相關(guān)資料,需要的朋友可以參考下

需求描述

需要實現(xiàn)一個“五彩斑斕”的餅圖:每塊餅上的標(biāo)簽顏色與這塊餅的顏色一致。

實現(xiàn)思路

要改變餅圖標(biāo)簽的顏色,需要參考echarts餅圖label配置項,以及這個很棒的官方示例:餅圖引導(dǎo)線調(diào)整。從這個示例中可以了解到自定義標(biāo)簽涉及的兩個配置項:formatter(用于自定義標(biāo)簽顯示內(nèi)容)、rich(用于自定義標(biāo)簽文字顯示樣式)。

自定義標(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ù)的和,效果類似:

標(biāo)簽plus效果圖

分析

首先想到的方案,也是筆者曾經(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)址

[1] echarts餅圖label配置項

[2] echarts標(biāo)簽字符串模板

[3] JS模板字符串

[4] echarts支持的樣式配置

[5] echarts環(huán)形圖示例

總結(jié)

到此這篇關(guān)于echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽的文章就介紹到這了,更多相關(guān)echarts餅圖標(biāo)簽formatter使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS實現(xiàn)的合并多個數(shù)組去重算法示例

    JS實現(xiàn)的合并多個數(shù)組去重算法示例

    這篇文章主要介紹了JS實現(xiàn)的合并多個數(shù)組去重算法,涉及javascript數(shù)組遍歷、判斷、運算、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • JS實現(xiàn)簡單移動端鼠標(biāo)拖拽

    JS實現(xiàn)簡單移動端鼠標(biāo)拖拽

    這篇文章主要為大家詳細介紹了JS實現(xiàn)簡單移動端鼠標(biāo)拖拽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Javascript函數(shù)技巧學(xué)習(xí)

    Javascript函數(shù)技巧學(xué)習(xí)

    這篇文章主要介紹了Javascript函數(shù)技巧學(xué)習(xí),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • HTML長文本截取含有HTML代碼同樣適用的兩種方法

    HTML長文本截取含有HTML代碼同樣適用的兩種方法

    正如標(biāo)題所言我們可以使用CSS截斷字符串:IE,FireFox,Opera ,Safari都兼容也可以使用js截取,具體實現(xiàn)如下,希望對大家有所幫助
    2013-07-07
  • JS document對象簡單用法完整示例

    JS document對象簡單用法完整示例

    這篇文章主要介紹了JS document對象簡單用法,結(jié)合完整實例形式詳細分析了JS document對象獲取、輸出、節(jié)點調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • javascript函數(shù)定義的幾種區(qū)別小結(jié)

    javascript函數(shù)定義的幾種區(qū)別小結(jié)

    本篇文章主要是對javascript函數(shù)定義的幾種區(qū)別進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • JavaScript中this的用法及this在不同應(yīng)用場景的作用解析

    JavaScript中this的用法及this在不同應(yīng)用場景的作用解析

    由于其運行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對象、當(dāng)前對象或者任意對象,這完全取決于函數(shù)的調(diào)用方式,這篇文章主要給大家介紹了JavaScript中this的用法及this在不同應(yīng)用場景的作用解析,一起看看吧
    2017-04-04
  • JavaScript常用內(nèi)置對象用法分析

    JavaScript常用內(nèi)置對象用法分析

    這篇文章主要介紹了JavaScript常用內(nèi)置對象用法,簡單總結(jié)分析了javascript String對象、Date對象、Math類、數(shù)組對象等常見對象的相關(guān)功能、方法與使用注意事項,需要的朋友可以參考下
    2019-07-07
  • JavaScript中獲取時間的函數(shù)集

    JavaScript中獲取時間的函數(shù)集

    這篇文章主要介紹了JavaScript中獲取時間的函數(shù)集,通過實例代碼給大家講解,非常詳細,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • Flutter自適用高度PageView的實現(xiàn)方案

    Flutter自適用高度PageView的實現(xiàn)方案

    在?Flutter?中,PageView?是一個非常常用的組件,能夠?qū)崿F(xiàn)多個頁面的滑動切換,這篇文章主要介紹了Flutter-自適用高度PageView,需要的朋友可以參考下
    2024-08-08

最新評論