Echarts如何生成没有上下两端线的箱线图

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

正常的箱线图:

没有两端线的箱线图:
解决方案:

1.首先尝试过修改boxplotitemStyle,但是发现boxplotitemStyle,但是发现所有线条都去掉了。

js 复制代码
itemStyle: {
          color: colors[0],
          borderColor: 'transparent',
          borderWidth: 0,
          
}
  1. 然后尝试了很多,最终解决就是,

** 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 
    },
]

终于完美解决了,因为是自己项目,大概思路就是这样,项目代码太多了就不贴全了,这种需求也是少。

相关推荐
linweidong2 小时前
C++ 模块化编程(Modules)在大规模系统中的实践难点?
linux·前端·c++
leobertlan6 小时前
2025年终总结
前端·后端·程序员
子兮曰6 小时前
OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
前端·javascript·github
百锦再7 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
莲华君7 小时前
React快速上手:从零到项目实战
前端·reactjs教程
百锦再7 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
易安说AI7 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
失忆爆表症9 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui
小迷糊的学习记录9 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜9 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试