亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Echart:如何設置標記區域以填充 xAxis 中的部分

Echart:如何設置標記區域以填充 xAxis 中的部分

慕無忌1623718 2022-07-21 21:36:48
我在標記區域時遇到問題:我需要能夠基于 xAxis 選擇一個條形區域,例如從 0 到 1、從 1 到 2 等。但是當我嘗試為條形提供選項時[{xAxis: 0, itemStyle: {color: red}},{xAxis: 1}]它標記一個區域,從索引為 0 的 xAxis 區域的中間到索引為 1 的 xAxis 區域的中間。有沒有辦法讓它從一個區域的開始標記到結束。目前我設法只使用像素中的 x 選項這樣做: https ://codesandbox.io/s/react-echart-markarea-ksj31?file=/src/index.js:714-726有更好的方法嗎?
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

我無法想象有一種方法可以滿足您的要求。似乎沒有這樣的,但沒有什么可以阻止我們自己做,見下文。


當調用帶有join = true標記區域的函數時,將計算從第一個到最后一個的范圍。


calcMarkAreaByBarIndex(myChart, join = true, [4, 9])

當調用帶有標記區域的函數時,join = false將為每個柱計算。


calcMarkAreaByBarIndex(myChart, join = true, [4, 5, 6, 9])

  var myChart = echarts.init(document.getElementById('main'));

 

  var option = {

      tooltip: {},

      xAxis: {

        data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

      },

      yAxis: {},

      series: [

        {

          id: 'myBar',

          name: 'Series',

          type: 'bar',

          data: [11, 11, 11, 11, 12, 13, 110, 123, 113, 134, 93, 109],

          markArea: {

            data: [

              [{x: 184},{x: 216}],

              [{x: 224},{x: 256}],

             ]

        },

      },

    ]

  };

     

  myChart.setOption(option);

  

  function calcMarkAreaByBarIndex(chartInstance, join = false, barIdx){

  var series = chartInstance.getModel().getSeriesByType('bar');

  var seriesData = series.map((s, idx) => s.getData())[0];

    var barNum = seriesData.count();

    var barCoors = [];

    var layout = idx => seriesData.getItemLayout(idx);

    

    for(var i = 0; i < barNum; i++){

      if(!barIdx.includes(i)) continue;

      barCoors.push([

        { x: layout(i).x },

        { x: layout(i).x + layout(i).width },

      ])

    }

    

    if(join){

      return [

        [

          { x: barCoors[0][0].x },

          { x: barCoors[barCoors.length - 1][1].x }

        ]

      ]

    } else {

      return barCoors

    }

  }

  

  var markedAreas = {

    series: {

      id: 'myBar',

      markArea: {

        data: calcMarkAreaByBarIndex(myChart, join = true, [4,9])

      }

     }

   };

  

  myChart.setOption(markedAreas);

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/echarts.min.js"></script>

<div id="main" style="width: 600px;height:400px;"></div>


查看完整回答
反對 回復 2022-07-21
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

我找到了一個對我有用的解決方案:基本上,您需要手動設置 yAxis 的最大道具,添加另一個 xAxis,使其不可見,創建一個類型為“bar”的自定義系列并將 xAxisIndex 設置為 1:


data: [maxYaxisValue,maxYaxisValue...], //length === xAxis.data.length

type: 'bar',

barWidth: '100%',

color: transparent,

xAxisIndex: 1,

并使用背景顏色和邊框寬度按索引設置條形您可以在此處查看工作示例 https://codesandbox.io/s/react-echart-markarea-m0mgq?file=/src/index.js


查看完整回答
反對 回復 2022-07-21
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號