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 // 控制间隙高度
    }
  }))
};

效果图:

相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端