echarts柱状图实现左右横向对比

实现效果如上图

 其实是两组数据,其中一组数据改为负数,然后 在展示的时候,在将负数取反

第一处修改坐标轴

   xAxis: [
      {
        type: 'value',
        axisLabel: {
          formatter: function (value) {
            if (value < 0) {
              return -value;
            }else{
              return value;
            }
          }


        }
      }
    ],

第二处修改数据,转负为正

 {
        name: '左',
        type: 'bar',
        color: '#21B8FF',
        stack: '总量',
        label: {
          show: true,
          position: 'left',
          formatter: function (value) {
            if (value.data < 0) {
              return -value.data;
            }
          },


        },
        emphasis: {
          focus: 'series'
        },
        data: [-12, -12, -10, -13, -19, -23, -21, -34, -22, -12]
      }

这里数据如果初始为正,先便利一遍加负号

第三处、formatter也要变

  formatter: function (params) {
        var tooltipHtml = '';
        params.forEach(function (item) {
          var value = item.value;
          if (value < 0) {
            value = -value;
          }
          tooltipHtml += item.seriesName + ': ' + value + '<br/>';
        });
        return tooltipHtml;
      }

我的全部代码

<template>
  <div id="echarts11"></div>
</template>

<script setup>
import * as echarts from "echarts";
const emit = defineEmits();

const props = defineProps({
  echartList: {
    default: [],
  },
  dolDate: {
    defalut: false
  }
});
const initChart = () => {
  let xdata = [];
  let ydata1 = [];
  let ydata2 = [];

  let xdataid = [];
  props.echartList.forEach((item) => {
    xdata.push(item.cityName);
    // xdataid.push(item.cityId);
    ydata1.push(item.parkArea);
    ydata2 = [-15, -25, -35, -45, -55]
    // ydata2.push(item.water);
  });
  const machart = echarts.init(document.getElementById("echarts11"));

  var option = {
    tooltip: {
      trigger: 'axis',
      axisPointer: {            // 坐标轴指示器,坐标轴触发有效
        type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
      },
  formatter: function (params) {
        var tooltipHtml = '';
        params.forEach(function (item) {
          var value = item.value;
          if (value < 0) {
            value = -value;
          }
          tooltipHtml += item.seriesName + ': ' + value + '<br/>';
        });
        return tooltipHtml;
      }
    },
    legend: {
      data: ['左', '右']
    },
    grid: {
      left: '3%',
      right: '4%',
      bottom: '3%',
      containLabel: true
    },
    xAxis: [
      {
        type: 'value',
        axisLabel: {
          formatter: function (value) {
            if (value < 0) {
              return -value;
            }else{
              return value;
            }
          }


        }
      }
    ],
    yAxis: [
      {
        type: 'category',
        axisTick: {
          show: false
        },
        data:xdata
      }
    ],
   
    series: [
      {
        name: '右',
        type: 'bar',
        color: '#74D9A9',
        stack: '总量',
        label: {
          show: true,
          position: 'right'
        },
        emphasis: {
          focus: 'series'
        },
        data: [2, 3, 9, 7, 139, 66, 42, 16, 9, 10]
      },
      {
        name: '左',
        type: 'bar',
        color: '#21B8FF',
        stack: '总量',
        label: {
          show: true,
          position: 'left',
          formatter: function (value) {
            if (value.data < 0) {
              return -value.data;
            }
          },


        },
        emphasis: {
          focus: 'series'
        },
        data: [-12, -12, -10, -13, -19, -23, -21, -34, -22, -12]
      }
    ]
  };

  machart.setOption(option);
  setTimeout(() => {
    window.addEventListener("resize", resizeFn);
  }, 100);
  const resizeFn = () => {
    return machart.resize();
  };
  machart.on("click", (params) => {
    if (params.componentType === "series") {
      const dataIndex = params.dataIndex;
      const yValue = xdata[dataIndex]; // 获取对应柱子的y值
      // const cidtyid = xdataid[dataIndex]; // 获取对应柱子的y值
      emit("changedi", yValue);

      // 在这里你可以对获取到的y值进行其他操作,比如弹窗显示等
    }
  });
};
setTimeout(() => {
  initChart();
}, 800);
defineExpose({
  initChart,
});
onBeforeUnmount(() => {
  // 离开页面必须进行移除,否则会造成内存泄漏,导致卡顿
  window.removeEventListener("resize", initChart);
});
watch(
  () => props.echartList,
  (newVal, oldVal) => {
    if (newVal !== oldVal) {
      initChart();
    }
  }
);
</script>

<style scoped>
#echarts11 {
  width: 100%;
  height: 90%;
  /* height:    calc(30vh- 10px); */
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值