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

效果图:

相关推荐
老神在在00110 分钟前
SpringMVC1
java·前端·学习·spring
薛定谔的算法3 小时前
# 从0到1构建React项目:一个仓库展示应用的架构实践
前端·react.js
Tina学编程4 小时前
HTML基础P1 | HTML基本元素
服务器·前端·html
一只小风华~5 小时前
Web前端:JavaScript和CSS实现的基础登录验证功能
前端
90后的晨仔5 小时前
Vue Router 入门指南:从零开始实现前端路由管理
前端·vue.js
LotteChar5 小时前
WebStorm vs VSCode:前端圈的「豆腐脑甜咸之争」
前端·vscode·webstorm
90后的晨仔5 小时前
零基础快速搭建 Vue 3 开发环境(附官方推荐方法)
前端·vue.js
洛_尘5 小时前
Java EE进阶2:前端 HTML+CSS+JavaScript
java·前端·java-ee
孤独的根号_5 小时前
Vite背后的技术原理🚀:为什么选择Vite作为你的前端构建工具💥
前端·vue.js·vite
吹牛不交税6 小时前
Axure RP Extension for Chrome插件安装使用
前端·chrome·axure