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

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

正常的箱线图:

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

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

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

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

相关推荐
子兮曰4 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
paopaokaka_luck7 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787057 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH7 小时前
HTML 的 <video> 元素
前端·html
溪语流沙8 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
逐光者9338 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC8 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo8 小时前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师8 小时前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd01239 小时前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化