Vue— Echarts 多系列柱状图,堆叠柱状图, 水球图

发布时间:2024年01月19日

一、基础

echarts官网:快速上手 - 使用手册 - Apache ECharts

推荐一个各种图表的网站:https://madeapie.com/#/

安装引入配置暂省略

1 准备一个DOM容器(定义一个?<div>?节点),一定要有宽高(可以是%)

<template>
    <div id="main" style="width: 600px;height:400px;"></div>
</template>

?2 初始化的时候,传入该节点?echarts.init , 监听图表容器的大小并改变图表大小。

  this.myChart= echarts.init(
      document.getElementById("main")
    ); 
  window.addEventListener('resize', function() {
    this.myChart.resize();
  });

3 准备配置项 、可以在图表组件中去调接口获取数据(我是在父组件获取的数据传过来,于是就是watch里面监听然后展示)

4 使用指定的配置项和数据展示图表 myChart.setOption(option)

汇总:

<script>

export default {
  name: "",
  props: {
    // 父组件传的数据
    XXXXXX: {
      type: Object,
    default: () => {}
    },
  },
  data() {
    return {
		XXXChart:null,
    };
  },
  watch: { 
    // 监听数据变化 更新图表 
    XXXXXX(newVal, oldVal){
      this.initChart();
    }
  },
  mounted() {
    // 初始化实例
    this.XXXChart = echarts.init(
      document.getElementById("myChart")
    );
    // 改变图表大小
    window.addEventListener("resize", function() {
      this.XXXChart.resize();
    });
  },
 methods: {
    initChart() {
      let option = {}
      this.XXXChart.setOption(option);
    },
  }
};

二、多系列柱状图

配置项:

let option = {
  // 标题
  title: {
    text: 'XXXXXX',
  },
  // 图例
  legend: {
    right:15, // 让图例靠右 可以是数值 也可以是"%"
  },
  // 提示框
  tooltip: {
    trigger: 'axis', // 触发类型 axis-坐标轴触发(主要在柱状图,折线图等会使用类目轴的图表中使用)
    // 坐标轴指示器配置项
    axisPointer: {
      type: 'shadow'
    }
  },
  // 绘图网格
  grid: {
    left: '3%', // 离容器左侧的距离
    right: '4%',// 离容器右侧的距离
    bottom: '3%',// 离容器下侧的距离
    containLabel: true  // grid 区域是否包含坐标轴的刻度标签
  },
  // X轴 
  xAxis: {
    type: 'category', // 坐标轴类型为category-类目轴
    data: this.XXXXXX.XXX //类目数据[] 
  },
  // Y轴 
  yAxis: {
    type: 'value', // 坐标轴类型为数值轴
    minInterval: 1, // 最小间隔大小 因为此项目该数据不可能有小数 所以设置为1
    boundaryGap: [0, '20%'] //坐标轴两边留白策略 非类目轴是是一个两个值的数组,分别表示数据最小值和最大值的延伸范围,可以直接设置数值或者相对的百分比
  },
  // 系列 有几个系列写几组
  series: [
    {
      name: '内部', // 系列名称,用于tooltip的显示,legend的图例筛选
      type: 'bar', // bar-柱状图
      itemStyle:{ // 图形样式。
        //柱条颜色
        color: 'rgba(115,160,250,1)',
      },
      data: this.XXXXXX.AAAA //数据内容数组
    },
    {
      name: '外部',
      type: 'bar',
      itemStyle:{
         color: 'rgba(115,222,179,1)',
      },
      data: this.XXXXXX.BBBB
    }
  ]
};

效果图:

三、堆叠柱状图

配置项:

        let option = {
          // 标题
          title: {
             text: 'XXX',
             textStyle: {    
               color: "#436EEE", // 主标题文字的颜色
               fontSize: 17,  // 主标题文字的字体大小 
             }
          },
          // 提示框
          tooltip : {
            trigger: 'axis', // 坐标轴触发
            axisPointer : {  // 坐标轴指示器,坐标轴触发有效          
              type : 'shadow'
            }
          },
          // 图例
          legend: {
            data:['有效','过期'], // 如果图例跟系列的name对应 完全可以不用写
            right:15, // 离容器右侧的距离 可让图例偏右
            textStyle: { // 图例的公用文本样式
                color: 'rgba(217,217,217,1)'
            }
          },
          // 网格
          grid: {
            left: '3%', // 离容器左侧的距离
            right: '4%',// 离容器右侧的距离
            bottom: '3%',// 离容器下侧的距离
            containLabel: true  // grid 区域是否包含坐标轴的刻度标签
          },
          // X轴
          xAxis : [
            {
              type : 'category', // 类目轴
              data : this.XXX.AA, // 类目数据
              //splitLine: { //坐标轴在 grid 区域中的分隔线。默认类目轴不显示
              //  show: false
              //},
              // axisLine: {
              //   lineStyle: { // 坐标轴线线的颜色
              //     color: 'rgba(217,217,217,1)',
              //   }
              // },
              // axisLabel: { // 刻度标签文字的颜色
              //   color: 'rgba(121,121,121,1)'
              // }
            }
          ],
          // Y轴
          yAxis : [
            {
              type : 'value', // 数值轴
              minInterval:1, // 最小间隔大小 因为此项目该数据不可能有小数 所以设置为1
              boundaryGap: [0, '20%'] //坐标轴两边留白策略 非类目轴是是一个两个值的数组,分别表示数据最小值和最大值的延伸范围,可以直接设置数值或者相对的百分比
              splitLine: { // 坐标轴在 grid 区域中的分隔线。
                show: true
              },
              // axisLine: { 
              //   lineStyle: { // 坐标轴线线的颜色
              //     color: 'rgba(217,217,217,1)',
              //   }
              // }
            }
          ],
          series : [
            {
              name: '有效',
              type: 'bar', // 柱状图
              barWidth: 20, //柱条的宽度,不设时自适应。
              stack: '证书', // 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
              itemStyle: { 
                color: 'rgba(115,160,250,1)' // 柱条的颜色
              },
              data: this.xxxx.AAA
            },
            {
              name: '过期',
              type: 'bar',
              barWidth: 20, 
              stack: '证书',
              itemStyle: {
                 color: 'rgba(115,222,179,1)'
              },
              data: this.xxxx.bb
            }
          ]
        };

效果图:

四、水球图

水球图需要额外插件:

可以npm安装: 注意兼容性 (echarts-liquidfill@3 与Echarts5兼容, echarts-liquidfill@2 与 Echarts4兼容) 我们系统原本的echarts 是4.2.1? 就选这个2.0.6。 然后引入import 'echarts-liquidfill'

npm install echarts-liquidfill@2.0.6 --save

开发的时候感觉npm好慢? 于是直接下载的js 引入的(已上传资源),这一块具体也不清楚对不对 :我只用了里面src下的文件 在图表组件中?import '@/路径/echarts-liquidfill-2.0.6/src/liquidFill.js' 反正能正常显示

配置项:

  let option = {
      series: [{
        type: 'liquidFill', // 水球图
        radius: '80%', // 水球图半径 调整大小
        center: ['50%', '50%'], //图表相对于盒子的位置 第一个是水平的位置 第二个是垂直的值 默认是[50%,50%]是在水平和垂直方向居中 可以设置百分比 也可以设置具体值
        shape: 'circle',  //修改形状,同时还支持svg图作为形状:'path://........' 
        waveAnimation: 10, // 动画时长
        phase: 0, // 波的相位弧度 默认情况下是自动
        amplitude: 5, // 振幅 0为平面
        waveLength: "30%", // 因为原型波浪比较密 设置这个可以调节出效果
        // 水球样式
        itemStyle: { 
          color: 'rgba(119,162,250,1)', // 水球颜色
          opacity: 1, // 水球透明度
          shadowBlur: 0 // 波浪的阴影范围
        },
        // 设置水球图内部背景
        backgroundStyle: {  
          // borderColor: '#4348EC',
          // borderWidth: 10
          color: "#fff",//水球图内部背景色
        },
        // 设置圈内文本样式
        label: {   
          normal: { 
            insideColor: '#333', // 水波内部字体颜色 看有的文档写在textStyle里 但是我这不生效 写在这个位置可以生效
            color: '#333', // 背景处文本颜色
            fontSize: 18, // 字体大小
            position: ['50%', '50%'],//圈中文字的位置
            formatter: `有效证书占比\n\n ${this.XX.xxx}`, //默认显示百分比数据 重新编写水球内部文本  也可以function(param) {return ......},
          }
        },
        //外部轮廓
        outline: { 
          show: true, // 是否显示外圈
          borderDistance: 0, // 外部轮廓与图表的距离 数字
          itemStyle: { // 外部轮廓样式
            borderWidth: 3, // 外部轮廓宽度
            borderColor: 'rgba(119,162,250,1)', // 外部轮廓颜色
            //shadowBlur: 20, // 外部轮廓阴影范围
            //shadowColor: 'rgba(0, 0, 0, 0.25)' // 外部轮廓阴影颜色
          }
        },
        // 水球图数组数据可以简单的写数值,也可以为一个对象(单独设置某项样式)。显示多个波浪, 数值value须从大到小排列, 
        data: [{ 
          name: 'score', // 水球图数据名称
          direction: 'right',// 水球图数据方向
          value: 0.6, // 水球图数据值   
          itemStyle: { // 水球图数据样式
            opacity: 1, // 水球图数据透明度
            normal: { // 
              color: 'rgba(119,162,250,1)', // 水球图数据颜色
            }
          },
        }],
        color: ['rgba(119,162,250,1)'],
        emphasis:{
          itemStyle: {
            opacity :1 //鼠标经过波浪颜色的透明度
          }
        },
      }],
    }

效果图:

文章来源:https://blog.csdn.net/weixin_57468559/article/details/135545789
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。