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>

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
添加回答
舉報