echarts 實戰 : 惱人的間隔問題


使用 echarts 的時候,可能我們需要這個圖表的間隔是固定的。比如 3個 4個 5個。

(注意計算間隔數量的時候是不算 x軸 本身的。)

這個問題看似簡單,其實有點麻煩。

yAxis.splitNumber number
[ default: 5 ]
坐標軸的分割段數,需要注意的是這個分割段數只是個預估值,最后實際顯示的段數會在這個基礎上根據分割后坐標軸刻度顯示的易讀程度作調整。

在類目軸中無效。

 

但其實這個設置可能並不管用。

因為 echarts 會根據你喂給她的數據自動判斷應該有幾個刻度,很多時候,你設置了3個,她卻給你整了5個。

 

那么就只能自己設置 interval 和 max 了。

yAxis.max number, string
[ default: null ]
坐標軸刻度最大值。

可以設置成特殊值 'dataMax',此時取數據在該軸上的最大值作為最大刻度

max 直接這樣也是可以的,但是要考慮到除不盡時刻度線不是整數的問題,所以還是自己算吧。

 

  getYInterval = (arr, settingData) => {
    const returnError = () => {
      return {
        interval:undefined,
        max:undefined
      }
    }

    let max = 0
    let interval = 0
    const standand = settingData.yInterval ? settingData.yInterval : 3

    if (!arr) {
      return returnError()
    }

    try {

      arr.forEach(item => {
        if (!item.data) {
          throw new Error()
        }
        item.data.forEach(child => {
          max = Math.max(max, child)
        })
      })

    } catch (e) {
      return returnError()
    }
    
    interval = max / standand

    if (interval !== parseInt(interval)) {
      interval = Math.ceil(interval)
      max = interval * standand
    }

    return {
      interval,
      max
    }
  }

幾個要點。

  • 用 try catch 和 判斷 防止 前端框架(react)報錯。
  • 刻度數量 standand 有默認的,也可以傳進去。
  • 如果遇到除不盡的情況,就通過向上取整的方式重新設置 interval 和 max 。

然后在渲染時使用這個方法。

// ...
    let yInterval
    let yMax
    if (settingData.xyType === "x") {
      const obj = this.getYInterval(normalData.sData, settingData)
      yInterval = obj.interval
      yMax = obj.max
    }
// ...
      yAxisExtraData = {
        axisLabel:{
          show:true,
          textStyle:{
            color:'rgba(9,178,215,1)',
            fontSize:16
          }
        },
        axisLine:{
          show:false,
          lineStyle:{
            color:'rgba(9,178,215,1)',
          }
        },
        splitLine: {
          lineStyle:{
            color: 'rgba(45,57,75,1)'
          }
        },
        axisTick:{
          show:false
        },
        splitNumber:3,
        minInterval:1,
        interval:yInterval,
        max:yMax
      }

 

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM