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

效果图:

相关推荐
Csvn9 小时前
WASM
前端
修己xj10 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing0310 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿11 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
moshuying12 小时前
网购能买Token了!
前端
h_654321012 小时前
echarts实现柱状图加一条横线
前端·echarts
风骏时光牛马12 小时前
生成一个后端标题,只需要一个标题,不需要其他的任何文本。
前端
子非鱼@Itfuture12 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端
郭小李12 小时前
openFeign入门
java·开发语言·前端
馒头不想说话13 小时前
AI当运营,帮你省人力
前端