echarts柱状图-实现柱状体堆叠从上到下显示

echarts在柱状体堆叠时,默认从下到上显示,例如温度告警在前,但是图表中的温度告警却是在最下面,效果图如下:
在这里插入图片描述
代码如下:

const xDataList = [
  '2024-02-01',
  '2024-02-02',
  '2024-02-03',
  '2024-02-04',
  '2024-02-05',
  '2024-02-06',
  '2024-02-07',
  '2024-02-08',
  '2024-02-09',
  '2024-02-10',
  '2024-02-11',
  '2024-02-12',
  '2024-02-13',
  '2024-02-14',
  '2024-02-15',
  '2024-02-16',
  '2024-02-17',
  '2024-02-18',
  '2024-02-19',
  '2024-02-20',
  '2024-02-21',
  '2024-02-22',
  '2024-02-23',
  '2024-02-24',
  '2024-02-25',
  '2024-02-26',
  '2024-02-27',
  '2024-02-28',
  '2024-02-29'
];
const dataList = [
  {
    name: '温度告警',
    values: [
      0, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 23, 25, 31, 11,
      0, 0, 0, 0, 0, 0, 0
    ]
  },
  {
    name: '湿度告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  },
  {
    name: '烟雾告警',
    values: [
      1, 0, 0, 0, 2, 0, 0, 1, 2, 4, 6, 4, 6, 0, 0, 0, 0, 0, 2, 11, 18, 8, 0, 0,
      0, 0, 0, 0, 0
    ]
  },
  {
    name: '水浸告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  },
  {
    name: '安防告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  },
  {
    name: '网络告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  }
];
option = {
  color: ['#7F8AF2', '#FFD666', '#F892B7', '#FFA275', '#79D38A', '#81D3F8'],
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  legend: {},
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: [
    {
      type: 'category',
      data: xDataList
    }
  ],
  yAxis: [
    {
      type: 'value'
    }
  ],
  series: dataList.map((item) => {
    return {
      name: item.name,
      type: 'bar',
      barWidth: 20,
      stack: 'warnTrend',
      data: item.values
    };
  })
};

但是存在一种需求是柱状体可以根据数据顺序从上往下显示,效果图如下:
在这里插入图片描述更改后的代码如下:

const xDataList = [
  '2024-02-01',
  '2024-02-02',
  '2024-02-03',
  '2024-02-04',
  '2024-02-05',
  '2024-02-06',
  '2024-02-07',
  '2024-02-08',
  '2024-02-09',
  '2024-02-10',
  '2024-02-11',
  '2024-02-12',
  '2024-02-13',
  '2024-02-14',
  '2024-02-15',
  '2024-02-16',
  '2024-02-17',
  '2024-02-18',
  '2024-02-19',
  '2024-02-20',
  '2024-02-21',
  '2024-02-22',
  '2024-02-23',
  '2024-02-24',
  '2024-02-25',
  '2024-02-26',
  '2024-02-27',
  '2024-02-28',
  '2024-02-29'
];
const dataList = [
  {
    name: '温度告警',
    values: [
      0, 0, 11, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 23, 25, 31, 11,
      0, 0, 0, 0, 0, 0, 0
    ]
  },
  {
    name: '湿度告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  },
  {
    name: '烟雾告警',
    values: [
      1, 0, 0, 0, 2, 0, 0, 1, 2, 4, 6, 4, 6, 0, 0, 0, 0, 0, 2, 11, 18, 8, 0, 0,
      0, 0, 0, 0, 0
    ]
  },
  {
    name: '水浸告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  },
  {
    name: '安防告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  },
  {
    name: '网络告警',
    values: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0
    ]
  }
];
  // 1. 获取legend
  const legendData = dataList.map(item => item.name);
option = {
    // 2. 颜色倒着写
    // color: ['#7F8AF2','#FFD666','#F892B7','#FFA275','#79D38A','#81D3F8'],
    color: ['#81D3F8','#79D38A','#FFA275','#F892B7','#FFD666','#7F8AF2'],
    tooltip: {
      trigger: 'axis',
      axisPointer: {
        type: 'shadow'
      },
      // 3.自定义内容
      formatter: function (params) {
        let res = '';
        let data = '';
        for (let i = params.length - 1; i > -1; i--) {
          data = `<div style="margin-bottom: 5px;">${params[i].name}</div>`;
          res += `<div style="display: flex;">
                    <div style="margin-right: 4px;">${params[i].marker}</div>
                    <div style="margin-right: 20px;">${params[i].seriesName}</div>
                    <div style="font-weight: bold;text-align: right;">${params[i].value}</div>
                  </div>`;
        }
        return data + res;
      },
    },
    legend: {
      data: legendData
    },
    grid: {
      left: '3%',
      right: '4%',
      bottom: '3%',
      containLabel: true
    },
    xAxis: [
      {
        type: 'category',
        data: xDataList,
      }
    ],
    yAxis: [
      {
        type: 'value',
      }
    ],
    // 4. 数据倒序
    series: dataList.reverse().map((item) => {
      return {
        name: item.name,
        type: 'bar',
        barWidth: 20,
        stack: 'warnTrend',
        data: item.values,
      }
    })
  }

备注:代码可以直接粘贴到echarts官网的示例中运行:https://echarts.apache.org/examples/zh/editor.html?c=bar-tick-align

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts柱状图堆叠是指将多个数据系列的柱子堆叠在一起展示,以突出各数据系列之间的比较关系。堆叠的原理是通过设置series中的stack属性来实现的。在柱状图中,每个数据系列的柱子会按照堆叠的方式叠加在一起,形成一个高度累积的效果。 在某些情况下,当设置Y轴的scale属性为true时,会导致部分柱体无法显示。根据引用的提供的信息,可以推断出这个问题可能是由于Y轴的scale属性设置不当导致的。具体来说,当只有一组数据时,Y轴的scale属性为true时,可能会导致柱子的高度超过了图表的可视范围,从而无法显示出来。 为了解决这个问题,可以尝试删除Y轴的scale属性,或者将其设置为false。这样可以确保柱子的高度在可视范围内,从而正常显示出来。请注意,在删除或修改属性之后,需要重新编译和查看效果,以确保问题得到解决。 总结起来,Echarts柱状图堆叠是通过设置series的stack属性实现的,而Y轴的scale属性可能会导致部分柱体无法显示。为了解决这个问题,可以尝试删除或修改Y轴的scale属性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Echarts柱状图堆叠有些柱体获取到数值但是不显示图形的问题](https://blog.csdn.net/qq_40417349/article/details/130860867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值