首页 > 其他分享 >封装通用 ECharts 图表组件(四):分格柱状图实现

封装通用 ECharts 图表组件(四):分格柱状图实现

时间:2024-05-29 15:04:51浏览次数:15  
标签:color 配置 分格 图表 柱状图 组件 ECharts

在数据可视化的世界中,ECharts 以其强大的功能和灵活性,成为了开发者们的首选图表库之一。继我们之前探讨的环形图封装之后,本文将带领大家进入另一个实用且美观的图表类型——分格柱状图的封装实现。

分格柱状图简介

分格柱状图是一种特殊的柱状图,它通过将每个柱子分割成多个小格,来更直观地展示数据的对比和层次。这种图表类型非常适合用来展示具有多个维度的数据集,例如不同类别的对比、时间序列的增长等。

分割柱状图效果图

封装组件的优势

封装 ECharts 分格柱状图组件,可以带来以下优势:

  1. 代码复用:创建一个可复用的组件,减少在不同项目中重复编写相同代码的工作。
  2. 维护方便:集中管理图表配置,使得后期的维护和更新变得更加简单快捷。
  3. 灵活性:通过 props 或计算属性传递数据和配置,使得组件能够灵活应对不同的数据展示需求。

实现步骤

1. 引入依赖

首先,确保你的项目中已经引入了 ECharts 库和 QuickChart 组件,用于快速生成图表。

<script>
  import * as echarts from 'echarts'
  import QuickChart from '@/components/QuickChart'
  export default {
    components: { QuickChart},
  }
</srcipt>

2. 创建Vue组件

定义 Vue 组件的结构,并在模板中引入 QuickChart 组件,通过 barOption 属性传入柱状图的配置。

<template>
  <div class="basiContent">
    <div style="width: 100%; height: 100%">
      <QuickChart :option="barOption" />
    </div>
  </div>
</template>

3. 定义数据

在组件的 data 函数中定义 x 轴的类别和相应的数据。

data() {
  return {
    resourcexAxis: ['前端设备', '已纳管井场', '已纳管作业区', '前端设备异常', '已纳管联合站', '异常人员'],
    resourceData: ['3062', '3362', '4062', '1162', '2061', '1029'],
  }
},

4. 计算属性

使用计算属性 barOption 来定义柱状图的配置项。这里定义了图表的颜色、网格、提示框、系列等配置项,并通过 pictorialBar 类型实现了分格效果。

computed: {
  barOption() {
    return {
      // 网格配置,用于控制图表元素的位置和间距
      grid: {
        left: 60,  // 左侧边距设置为60px
        right: 20, // 右侧边距设置为20px
        top: 50,   // 上边距设置为50px
        bottom: 40 // 下边距设置为40px
      },
      // x轴配置
      xAxis: {
        type: 'category',         // x轴类型为分类轴
        data: this.resourcexAxis, // 分类数据来自data中的resourcexAxis数组
        axisLabel: {              // x轴刻度标签配置
          show: true,             // 显示刻度标签
          textStyle: {            // 刻度标签的字体样式
            fontSize: 21,         // 字体大小为21px
            color: '#26DEFF'      // 字体颜色为#26DEFF
          },
          interval: 0,            // 刻度标签的间隔设置,0表示不间隔
        },
      },
      // y轴配置
      yAxis: {
        type: 'value',          // y轴类型为数值轴
        name: '数量/个',         // y轴名称为“数量/个”
        nameTextStyle: {        // y轴名称的字体样式
          color: '#ccc',        // 名称颜色为#ccc
          fontSize: 22,         // 名称字体大小为22px
        },
        splitLine: {            // y轴分割线配置
          show: true,           // 显示分割线
          lineStyle: { color: 'rgba(255, 255, 255, 0.2)', type: 'dashed' }, // 分割线样式为虚线,颜色为淡白色
        },
        axisLabel: {            // y轴刻度标签配置
          show: true,           // 显示刻度标签
          textStyle: {          // 刻度标签的字体样式
            fontSize: 21,       // 字体大小为21px
            color: '#26DEFF',   // 字体颜色为#26DEFF
          },
        },
      },
      // 图表滚动配置
      type: 'move',
      moveNum: 6, // 每次滚动的柱子数量
      // 提示框配置
      tooltip: {
        confine: true,     // 将提示框限制在图表区域内
        trigger: 'axis',   // 提示框触发方式为坐标轴触发
        axisPointer: {     // 坐标轴指示器配置
          type: 'shadow',  // 指示器类型为阴影
          shadowStyle: { color: 'rgba(145, 145, 145, 0.3)' }, // 阴影颜色
        },
        formatter: function (params) {
          // 提示框内容格式化函数
          return params
            .filter(item => item.seriesType === 'bar')
            .map(item => {
              const marker = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:rgba(24, 144, 255, 0.8);"></span>`
              return item.axisValueLabel + '<br />' + marker + item.seriesName + ': ' + item.value
            })
            .join('')
        },
      },
      // 数据系列配置
      series: [
        {
          // 普通柱状图系列配置
          name: '数量',
          // data数据来自data中的resourceData数组,并进行了特殊处理
          data: this.resourceData.map((value, index, array) => {
            const maxIndex = array.indexOf(Math.max(...array))
            // 如果当前索引是最大值,则设置特殊的itemStyle
            if (index === maxIndex) {
              return {
                value: value,
                itemStyle: {
                  color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
                    { offset: 0, color: 'rgba(237, 85, 53, 0)' },
                    { offset: 1, color: 'rgba(237, 85, 53, 0.8)' },
                  ]),
                },
              }
            } else {
              return value
            }
          }),
          type: 'bar',  // 图表类型为柱状图
          barWidth: 48, // 柱子宽度为48px
          itemStyle: {  // 柱子样式配置
            color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ // 柱子渐变色配置
              { offset: 0, color: 'rgba(24, 144, 255, 0)' },        // 渐变色起始颜色
              { offset: 1, color: 'rgba(24, 144, 255, 0.8)' },      // 渐变色结束颜色
            ]),
          },
        },
        {
          // 分隔柱状图系列配置
          type: 'pictorialBar',           // 图表类型为分格柱状图
          itemStyle: {                    // 分隔柱样式配置
            normal: { color: '#101522' }, // 分隔柱颜色
          },
          symbolRepeat: true,             // 符号是否重复
          symbolMargin: 4,                // 符号间距
          symbol: 'rect',                 // 符号形状为矩形
          symbolClip: true,               // 是否对超出范围的图形进行裁剪
          symbolSize: [48, 2],            // 符号大小
          symbolPosition: 'start',        // 符号位置在开始
          symbolOffset: [0, 0],           // 符号偏移量
          data: this.resourceData,        // 分隔数据来自data中的resourceData数组
          z: 99,                          // 分隔层级,99表示在普通柱状图之上
        },
      ]
    }
  }
},

5. 样式定义

为组件添加基本的样式,确保图表能够正确显示。

<style lang="scss" scoped>
.basiContent {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
  height: 280px;
}
</style>

总结

通过封装 ECharts 分格柱状图组件,我们不仅能够提高开发效率,还能使得图表的维护变得更加简单。这种方法涉及到对 ECharts 配置项的深入理解,以及 Vue.js 的响应式和组件化特性的应用。

希望这篇文章能够帮助你更好地理解和实现自定义的 ECharts 分格柱状图组件,让你的数据可视化之旅更加丰富多彩。

标签:color,配置,分格,图表,柱状图,组件,ECharts
From: https://blog.csdn.net/m0_54340021/article/details/139231916

相关文章

  • echarts饼图给legend图例增加自定义点击事件
    echarts图例点击会有一个默认的点击事件,会把点击的图例对应的legend取消解决办法legendselectchanged事件中将取消选中的legend动态设置回来,主要代码如下:letchart=echarts.init(document.getElementById('main'),null)//图例点击事件chart.on('legendselectchanged',(pa......
  • pyecharts生成图片
      #-*-coding:utf-8-*-frompyechartsimportoptionsasoptsfrompyecharts.chartsimportPieimportpymysqlfromsnapshot_phantomjsimportsnapshotfrompyecharts.renderimportmake_snapshotimportdatetimel_mysql_server="192.168.1.14"......
  • echarts渐变内置生成器echarts.graphic.LinearGradient
    在使用echarts绘制图表时,如果需要使用渐变色,则应使用echarts内置的渐变色生成器echarts.graphic.LinearGradientseries:[{name:'',type:'bar',barMaxWidth:20,label:{show:true,color:'#fff',},......
  • 统计不同文件夹中的文件数量,并绘制相应的柱状图。
    一、数据类型每个文件夹下都是这种文件,虽然可以通过手动数出来了解文件数量,但为了更直观地看到每个文件夹的文件数量,可以使用图表来表示,这样会更加清晰。效果展示:  二、代码实现 importosimportmatplotlib.pyplotaspltfolder_names=['0','1','2','3']......
  • echarts X轴换行处理
    formatter:function(params){ varnewParamsName='';//拼接后的新字符串 varparamsNameNumber=params.length;//实际标签数 varprovideNumber=3;//每行显示的字数 varrowNumber=Math.ceil(paramsNameNumber/provideNumber);//如......
  • 【python】python 全国5A级景区数据采集与pyecharts可视化(源码+数据+论文)【独一无二】
    ......
  • Vue3实战笔记(45)—VUE3封装一些echarts常用的组件,附源码
    文章目录前言一、柱状图框选二、折线图堆叠总结前言日前使用hooks的方式封装组件,在我使用复杂的图标时候遇到了些问题,预想在onMounted中初始化echarts,在使用hooks的时候,组件没有渲染完,使用实例会出现各种各样的问题,并且在hooks中使用一些外部属性也属实遇到了些麻烦......
  • Vue3实战笔记(43)—Vue3组合式API下封装可复用ECharts图表组件
    文章目录前言一、封装echart图标钩子二、使用步骤总结前言接上文,已经安装好了ECharts,开始封装组件方便使用。一、封装echart图标钩子首先应用我们之前学习的钩子方式,在hooks目录下创建一个名为useECharts.js的文件,用于封装ECharts的逻辑:import{ref,onMo......
  • Windows pyinstaller wxPython pyecharts无法正常显示问题
    WindowspyinstallerwxPythonpyecharts无法正常显示问题最近遇到一个pyinstaller打包wxPythonpyecharts无法显示的问题,pyecharts生成的html页面显示空白。未使用pyinstaller打包时显示正常。问题原因WebViewBackendDefault=b''WebViewBackendEdge=b'wxWebViewEdge'Web......
  • 低代码与 Echarts 融合:开启智能可视化的创新浪潮
    前言在当今数字化时代,数据的价值愈发凸显,企业和组织需要有效地利用数据来作出战略决策和优化业务流程。可视化是一种强大的工具,可以将复杂的数据以直观的方式展现出来,帮助用户更好地理解和分析数据。近年来,低代码开发平台和Echarts可视化库的结合,为智能可视化带来了全新的创新......