Echarts如和生成没有两端线的箱线图
正常的箱线图:

没有两端线的箱线图:

解决方案:
1.首先尝试过修改boxplot
的itemStyle
,但是发现boxplot
的itemStyle
,但是发现所有线条都去掉了。
js
itemStyle: {
color: colors[0],
borderColor: 'transparent',
borderWidth: 0,
}

- 然后尝试了很多,最终解决就是,
** 2.1.**先变成没有线的样子:
js
seriesData.push([
item.q1,//item.min
item.q1,
item.median,
item.q3,
item.q3,//item.max
])```
这边把最大值和最小值修改为item.q1,item.q3,这样就没有线了,
### ****2.2**然后再加上```markLine```,这样就可以加上两端的线了,最终代码如下:**
```js
markLine: {
silent: true, // 不响应鼠标事件
symbol: 'none', // 不显示端点符号
lineStyle: {
color: colors[0], // 中位数线颜色与箱体颜色一致
width: 2, // 线条宽度
type: 'solid' // 实线
},
data: (() => {
try {
const markLineData = lanes[0].data.map((boxData, index) => {
// 获取当前head的原始数据
const headTitle = lanes[0].heads[index]
const headData = allHeads.find(h =>
h.table.toString() === currentTable.title.toString() &&
h.lane.toString() === lanes[0].lane.toString() &&
h.title.toString() === headTitle.toString()
)
if (headData) {
return [
{ xAxis: index, yAxis: headData.data.min },
{ xAxis: index, yAxis: headData.data.max }
]
}
return null
}).filter(Boolean)
return markLineData
} catch (error) {
console.error('Lane1 markLine数据生成出错:', error);
return []
}
})()
},

又出现了一个小bug,就是有的markline没有画出来,排除了数的问题,排除了数据量大的问题,最终发现是这个图表设置了固定的y轴,后期改为自动生成就完美解决了:
js
let yAxisMin = 0, yAxisMax = 10, adjustedStep = 5;
if (globalMin !== Infinity && globalMax !== -Infinity) {
if (selectedTabLevel.value === 'lane' && selectedTab.value) {
// lane级别:使用固定步长5
adjustedStep = 5;
yAxisMin = Math.floor(globalMin / 5) * 5;
yAxisMax = Math.ceil(globalMax / 5) * 5;
// 确保至少有3个刻度
if (yAxisMax === yAxisMin) {
yAxisMax = yAxisMin + adjustedStep * 3;
}
} else {
// table级别:使用固定步长5
adjustedStep = 5;
yAxisMin = Math.floor(globalMin / 5) * 5;
yAxisMax = Math.ceil(globalMax / 5) * 5;
// 确保至少有3个刻度
if (yAxisMax === yAxisMin) {
yAxisMax = yAxisMin + adjustedStep * 3;
}
}
}
return {
categories,
seriesData,
allHeads,
yAxisMin,
yAxisMax,
adjustedStep
}
js
yAxis: [
{
type: 'value',
gridIndex: 0,
position: 'left',
splitArea: { show: true },
axisLabel: {
color: '#333',
fontSize: 10,
show: true,
formatter: '{value}'
},
scale: false,
min: tableYAxisMin < -20 ? tableYAxisMin : -20, // 当数据最小值<-20时使用动态值,否则用固定值-20
max: tableYAxisMax > 20 ? tableYAxisMax : 20, // 当数据最大值>20时使用动态值,否则用固定值20
interval: 5 // 固定步长为5
},
]
终于完美解决了,因为是自己项目,大概思路就是这样,项目代码太多了就不贴全了,这种需求也是少。