echarts-多列柱状图中其中某一列数据为0时不占位

在这里插入图片描述

option

可以复制示例option代码,在echarts的示例background中粘贴运行来学习
https://echarts.apache.org/examples/zh/editor.html?c=bar-background

option = {
  xAxis: [
    {
      type: 'category',
      data: ['一', '', '']
    },
    {
      type: 'category',
      position: 'bottom',
      data: ['', '二', '']
    },
    {
      type: 'category',
      position: 'bottom',
      data: ['', '', '三']
    }
  ],
  yAxis: {
    type: 'value'
  },
  series: [
    // 第一个x轴数据
    {
      name: '一',
      type: 'bar',
      xAxisIndex: 0,
      barWidth: 30,
      data: [1]
    },
    {
      name: '二',
      type: 'bar',
      xAxisIndex: 0,
      barWidth: 30,
      data: [2]
    },
    {
      name: '三',
      type: 'bar',
      xAxisIndex: 0,
      barWidth: 30,
      data: [3]
    },
    // 第二个x轴数据
    {
      name: '一',
      type: 'bar',
      xAxisIndex: 1,
      barWidth: 30,
      data: ['', 1]
    },
    {
      name: '二',
      type: 'bar',
      xAxisIndex: 1,
      barWidth: 30,
      data: ['', 2]
    },
    // 第三个x轴数据
    {
      name: '一',
      type: 'bar',
      xAxisIndex: 2,
      barWidth: 30,
      data: ['', '', 2]
    },
    {
      name: '三',
      type: 'bar',
      xAxisIndex: 2,
      barWidth: 30,
      data: ['', '', 1]
    }
  ]
};
position: ‘bottom’

用于把x轴的轴名放在正确位置,不然不能正确显示x轴的轴名

xAxisIndex

表示使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用
比如示例中有三个x轴, xAxisIndex最大则为2,如果超过2,echarts直接报错,会直接渲染echarts失败
在series中设置相应的xAxisIndex可以保证柱在对应x轴中是居中对齐的,可以自己改一改看一看效果

barWidth

不设置的话会柱自动撑满所有宽度

xAxis与series

xAxis与series的data位置要对应

根据以上规律编写js处理后端柱图数组数据

一般来说后端柱图数组数据,是这样格式的:

const xAxis = [
  '星期一',
  '星期二',
  '星期三',
  '星期四',
  '星期五',
  '星期六',
  '星期天'
];
const bar1 = [10, 2, 0, 4, 5, 6, 7];
const bar2 = [8, 9, 10, 11, 12, 13, 14];
const bar3 = [0, 0, 17, 18, 19, 20, 21];

function dealBar(arr, name) {
  const bar = [];
  arr.forEach((item, index) => {
    const data = [];
    for (let i = 0; i < index; i++) {
      data.push('');
    }
    if (item) {
      data.push(item);
      bar.push({
        name,
        type: 'bar',
        xAxisIndex: index,
        barWidth: 20,
        data
      });
    }
  });
  return bar;
}
option = {
  legend:{},
  xAxis: xAxis.map((item, index) => {
    const data = Array(xAxis.length).fill('');
    data[index] = item;
    return {
      type: 'category',
      position: 'bottom',
      data: data
    };
  }),
  yAxis: {
    type: 'value'
  },
  series: [
    ...dealBar(bar1, 'bar1'),
    ...dealBar(bar2, 'bar2'),
    ...dealBar(bar3, 'bar3')
  ]
};

同理,水平方向柱图,调整下xAxis和yAxis
在这里插入图片描述

const xAxis = [
  '星期一',
  '星期二',
  '星期三',
  '星期四',
  '星期五',
  '星期六',
  '星期天'
];
const bar1 = [10, 2, 0, 4, 5, 6, 7];
const bar2 = [8, 9, 10, 11, 12, 13, 14];
const bar3 = [0, 0, 17, 18, 19, 20, 21];

function dealBar(arr, name) {
  const bar = [];
  arr.forEach((item, index) => {
    const data = [];
    for (let i = 0; i < index; i++) {
      data.push('');
    }
    if (item) {
      data.push(item);
      bar.push({
        name,
        type: 'bar',
        yAxisIndex: index,
        barWidth: 20,
        data
      });
    }
  });
  return bar;
}
option = {
  legend:{},
  xAxis: {
    type: 'value',
  },
  yAxis: xAxis.map((item, index) => {
    const data = Array(xAxis.length).fill('');
    data[index] = item;
    return {
      type: 'category',
      position: 'left',
      data: data
    };
  }),
  series: [
    ...dealBar(bar1, 'bar1'),
    ...dealBar(bar2, 'bar2'),
    ...dealBar(bar3, 'bar3')
  ]
};
ESP32是一种高度集成的系统级芯片,常用于物联网设备和嵌入式系统。它具有强大的功能和灵活性,能够支持多种通信协议和连接方式。 ESP32在低功耗模式下能够有效地延长电池寿命,适用于很多需要长间运行的场景。在Arduino,我们可以通过使用不同的睡眠模式和优化代码来实现低功耗。 ESP32的低功耗模式主要包括睡眠模式和深度睡眠模式。睡眠模式是在不关闭整个芯片的情况下,将主处理器和外设暂处于低功耗状态。在睡眠模式下,Arduino代码会停止执行,只有断引脚能够唤醒芯片。这种模式适用于需要实响应的应用场景。 而深度睡眠模式是将整个芯片的主处理器和外设关闭,只保留最低功耗电源和RTC(实钟)运行。在这种模式下,芯片只能通过外部触发器才能被唤醒。深度睡眠模式适用于长间不需要响应的应用场景,可以大幅度延长电池使用寿命。 在Arduino,我们可以通过编写代码来控制ESP32的低功耗模式。通过设置睡眠模式或深度睡眠模式的间,芯片将自动进入相应的低功耗状态。同,我们还可以优化代码,减少功耗,比如关闭不必要的外设、使用低功耗库、使用低功耗的传感器等。 通过在ESP32上使用低功耗模式,结合Arduino的编程能力,我们可以实现高效的物联网设备和嵌入式系统,提升能源利用率,延长设备的使用寿命。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值