echarts 堆叠柱状图 柱与柱之间设置上下水平间隙

需求

这是UI设计图,很典型的堆叠柱状图,但它每个柱图之间有一定的间隙。

在配置项手册中,并没有一个属性能够直接设置这个间隙距离,那我们该如何实现呢?

思考

这个时候,没头绪怎么办?当然是遇事不决,可问 AI啦!

AI给的解决方案:

  • 调整 barCategoryGap(控制不同分类之间的间隙)
  • 调整 barGap(控制同一堆叠组内不同系列的间隙)

很明显,这俩方案不符合我们的要求,它们都是控制垂直间隙或者柱状宽度的。

  • 在堆叠块之间插入透明间隙(AI推荐)
js 复制代码
const option = {
  xAxis: { type: 'category', data: ['A', 'B', 'C', 'D'] },
  yAxis: { type: 'value' },
  series: [
    {
      name: '系列1',
      type: 'bar',
      stack: 'total',
      data: [10, 20, 30, 40],
      itemStyle: { color: '#5470C6' },
    },
    {
      name: '间隙',
      type: 'bar',
      stack: 'total',
      data: [2, 2, 2, 2], // 间隙高度(可调整)
      itemStyle: { color: 'transparent' },
    },
    {
      name: '系列2',
      type: 'bar',
      stack: 'total',
      data: [15, 25, 35, 45],
      itemStyle: { color: '#91CC75' },
    },
  ],
};

效果图:

哎,别说,效果确实达到了!但有没有觉得不够优雅?除此之外还有几个限制,比如说:

如果类目多达几十个,那么用作间隙的类目也需要几十个做分隔,这就有点本末倒置了;

还有,由于间隙高度是由data设置,间隙就是百分比高度,不固定(会随着其他类目值的增大而减小)...

所以,说了那么多,还有没有更加简洁、代价更小的方案呢?

有的兄弟,有的,包有的!

完美解决(borderColor + borderWidth)

在和UI讨论其他替代方案的时候,UI说加个rgba(0, 0, 0, 0.2)的边框吧,但是效果并不理想。然后我突然灵机一动,想到一个曲线救国的方法,如果透明度为0rgba(0, 0, 0, 0),那不就是类似间隙的效果了?

于是这个问题迎刃而解了。

js 复制代码
const dataList = [
  { name: 'Direct', data: [320, 332, 301, 334, 390, 330, 320] },
  { name: 'Email', data: [320, 332, 301, 334, 390, 330, 320] },
  { name: 'Union Ads', data: [320, 332, 301, 334, 390, 330, 320] },
  { name: 'Video Ads', data: [320, 332, 301, 334, 390, 330, 320] }
];

const option = {
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: [
    {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    }
  ],
  yAxis: [
    {
      type: 'value'
    }
  ],
  series: dataList.map((v) => ({
    ...v,
    type: 'bar',
    stack: 'Ad',
    itemStyle: {
      borderColor: 'transparent', // 设置透明边框
      borderWidth: 4 // 控制间隙高度
    }
  }))
};

效果图:

相关推荐
巴拉巴拉~~2 分钟前
KMP 算法通用图表组件:KmpChartWidget 多维度可视化 + PMT 表渲染 + 性能对比
前端·javascript·microsoft
智算菩萨8 分钟前
基于spaCy的英文自然语言处理系统:低频词提取与高级文本分析
前端·javascript·easyui
刘一说18 分钟前
Vue单页应用(SPA)开发全解析:从原理到最佳实践
前端·javascript·vue.js
疯狂成瘾者19 分钟前
前端vue核心知识点
前端·javascript·vue.js
Laravel技术社区1 小时前
用PHP8实现斗地主游戏,实现三带一,三带二,四带二,顺子,王炸功能(第二集)
前端·游戏·php
m0_738120722 小时前
应急响应——知攻善防Web-3靶机详细教程
服务器·前端·网络·安全·web安全·php
程序员爱钓鱼9 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder9 小时前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL10 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码10 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web