在Echarts中如何通過getZr().on(‘click’)方法獲取餅圖的具體數據以及處理多層次環形圖?

在Echarts中如何通過getZr().on(‘click’)方法獲取餅圖的具體數據以及處理多層次環形圖?

echarts餅圖點擊事件數據獲取及多層環形圖處理

ECharts餅圖的點擊事件處理經常需要獲取具體數據,但getZr().on(‘click’)方法返回的target屬性為PiePiece對象,無法直接獲取數據。本文將解決此問題,并講解如何處理多層環形圖的點擊事件

問題分析

使用getZr().on(‘click’)只能獲取到PiePiece,無法直接獲取數據。myChart.containPixel方法的第一個參數設置也容易出錯,尤其在餅圖(非網格)場景下。許多教程只關注網格圖的myChart.containPixel(‘grid’, pointInPixel)用法,并不適用于餅圖。此外,如何從多層環形圖中單獨獲取每個環的數據也是一個挑戰。

解決方案

  1. 獲取具體數據: 結合myChart.getOption()和myChart.convertFromPixel方法,可以有效獲取點擊的數據。

    myChart.getZr().on('click', function(params) {     let pointInPixel = [params.offsetX, params.offsetY];     let seriesIndex = myChart.convertFromPixel({ seriesIndex: 0 }, pointInPixel)[0];      if (seriesIndex !== undefined) {         let dataIndex = myChart.convertFromPixel({ seriesIndex: seriesIndex }, pointInPixel)[1];         let seriesData = myChart.getOption().series[seriesIndex].data[dataIndex];         console.log(seriesData); // 輸出點擊的數據項     } });

    convertFromPixel方法將像素坐標轉換為圖表坐標,得到seriesIndex和dataIndex,再從getOption()獲取到的配置中提取對應數據。

  2. myChart.containPixel的正確用法: myChart.containPixel的第一個參數應為包含seriesIndex的對象,對于多層環形圖,需要遍歷所有可能的seriesIndex。

    let pointInPixel = [params.offsetX, params.offsetY]; let seriesCount = myChart.getOption().series.length; // 獲取系列數量  for (let i = 0; i < seriesCount; i++) {     if (myChart.containPixel({ seriesIndex: i }, pointInPixel)) {         let dataIndex = myChart.convertFromPixel({ seriesIndex: i }, pointInPixel)[1];         let seriesData = myChart.getOption().series[i].data[dataIndex];         console.log(`Series ${i}:`, seriesData); // 輸出對應系列的數據         break; // 找到后跳出循環     } }
  3. 多層環形圖數據獲取: 通過遍歷所有系列 (myChart.getOption().series) 并使用上述方法獲取每個系列的數據,即可實現對多層環形圖中每個環的數據單獨獲取。

通過以上方法,可以有效地獲取ECharts餅圖(包括多層環形圖)的點擊事件數據,解決數據獲取和多層圖處理的難題。 記住根據你的圖表配置調整seriesIndex的范圍。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享