封装通用 ECharts 图表组件(二):圆柱柱状图实现

在数据可视化领域,柱状图是一种常见的图表类型,用于展示不同类别的数据对比。而圆柱柱状图则是柱状图的一种变体,它通过圆柱体来展示数据,使得图表更加立体和生动。本文将介绍如何使用封装组件来实现一个圆柱柱状图。

封装组件概述

封装组件是一种将特定功能模块化的编程实践,它可以帮助我们重用代码,提高开发效率。在本例中,我们将使用Vue.js框架结合ECharts库来封装一个圆柱柱状图组件。

圆柱柱状图效果图

实现步骤

1. 引入依赖

首先,我们需要在项目中引入ECharts库以及一个用于快速生成图表的组件QuickChart

import * as echarts from 'echarts'
import QuickChart from '@/components/QuickChart'

2. 创建Vue组件

创建一个Vue组件,并定义其组件结构。

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

3. 定义数据

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

data() {
  return {
    resourcexAxis: ['前端设备', '已纳管井场', '已纳管作业区', '前端设备异常', '已纳管联合站', '异常人员'],
    resourceData: ['62', '232', '162', '102', '261', '49'],
  }
},

4. 计算属性

使用计算属性barOption来定义柱状图的配置项。这段代码定义了ECharts图表的配置项,包括图表的布局、坐标轴、提示框、系列等。每个配置项都有其特定的作用,比如grid定义了图表在容器内的位置,xAxisyAxis分别定义了x轴和y轴的配置,series定义了图表的数据系列,包括背景圆柱和内部柱子等。通过这些配置,我们可以创建出一个具有立体感的圆柱柱状图。

computed: {
  barOption() {
    // 将数组中的字符串转换为数字
    let dataNumbers = this.resourceData.map(Number);
    // 计算最大值
    let maxValue = Math.max(...dataNumbers);
    // 找出大于或等于最大值的最小的100的倍数,用于设置背景柱状图的高度
    let roundedMaxValue = Math.ceil(maxValue / 100) * 100;
    // 创建一个新数组,填充上面计算出的整数倍数值,数量与 this.resourceData 相同
    let maxData = new Array(this.resourceData.length).fill(roundedMaxValue);
    console.log(maxData, '返回新的数组作为背景柱状图的数据');

    return {
      // 网格配置,定义图表在容器内的位置
      grid: {
        left: 60, // 左边界距离
        right: 20, // 右边界距离
        top: 50, // 上边界距离
        bottom: 40, // 下边界距离
      },
      // x轴配置,类型为category,数据为resourcexAxis数组
      xAxis: {
        type: 'category',
        data: this.resourcexAxis,
        axisLabel: {
          show: true, // 显示轴标签
          textStyle: { // 轴标签样式
            fontSize: 21, // 字体大小
            color: '#FFFFFF', // 字体颜色
          },
          interval: 0, // 标签显示间隔,0表示全部显示
        },
      },
      // y轴配置,类型为value
      yAxis: {
        type: 'value',
        // name: '数量/个', // 可以设置轴名称,这里被注释掉了
        nameTextStyle: { // 轴名称样式
          color: '#FFFFFF', // 名称颜色
          fontSize: 22, // 名称字体大小
        },
        splitLine: { // 分割线配置
          show: true, // 显示分割线
          lineStyle: { color: '#FFFFFF', type: 'dashed' }, // 分割线样式
        },
        axisLabel: { // 轴标签配置
          show: true, // 显示轴标签
          textStyle: {
            fontSize: 21, // 字体大小
            color: '#FFFFFF', // 字体颜色
          },
        },
      },
      // 图表类型为move,用于移动柱状图
      type: 'move',
      moveNum: 6, // 移动柱状图的数量
      // 提示框配置
      tooltip: {
        confine: true, // 将提示框限制在图表区域内
        trigger: 'axis', // 触发类型为坐标轴触发
        axisPointer: { // 坐标轴指示器配置
          type: 'shadow', // 指示器类型为阴影
          shadowStyle: { color: 'rgba(145, 145, 145, 0.3)' }, // 阴影样式
        },
        formatter: function (params) {
          // 自定义提示框显示内容
          var param = params.filter(function (item) {
            return item.seriesName === '内部柱子';
          })[0];
          if (param) {
            return param.axisValueLabel + ': ' + param.value;
          }
        },
      },
      // 系列数据配置,包括背景圆柱、内部柱子等
      series: [
        // 背景圆柱-上部圆配置
        {
          name: '上部圆',
          type: 'pictorialBar',
          silent: true, // 不显示提示信息
          symbolSize: [55, 10], // 图形大小
          symbolOffset: [0, -6], // 图形偏移
          symbolPosition: 'end', // 图形位置
          z: 12, // z轴层叠顺序
          color: '#4474A7', // 颜色
          data: maxData, // 数据
        },
        // 背景圆柱配置
        {
          name: '背景圆柱',
          type: 'bar',
          barWidth: 55, // 柱子宽度
          barGap: '10%', // 柱子间隔
          barCateGoryGap: '10%', // 类别间隔
          itemStyle: {
            normal: {
              color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [
                // 线性渐变颜色配置
                {
                  offset: 0,
                  color: 'rgba(84,165,255,0.31)',
                },
                {
                  offset: 0.55,
                  color: 'rgba(0,115,255,0.14)',
                },
                {
                  offset: 1,
                  color: 'rgba(4,4,26,0)',
                },
              ]),
              opacity: 0.8, // 透明度
            },
          },
          data: maxData, // 数据
        },
        // 内部柱子配置
        {
          name: '内部柱子',
          type: 'bar',
          barWidth: 55, // 柱子宽度
          z: 12, // z轴层叠顺序
          barGap: '-100%', // 柱子间隔
          // label配置被注释掉了
          // itemStyle配置了颜色渐变
          itemStyle: {
            opacity: 0.7, // 透明度
            color: function (params) {
              return new echarts.graphic.LinearGradient(
                0,
                0,
                0,
                1,
                [
                  {
                    offset: 0,
                    color: '#0E60B2', // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: '#1FAEDE', // 100% 处的颜色
                  },
                ],
                false,
              )
            },
          },
          data: this.resourceData, // 数据
        },
        // 内部柱子-上部圆配置
        {
          name: '上部圆',
          type: 'pictorialBar',
          silent: true, // 不显示提示信息
          symbolSize: [55, 10], // 图形大小
          symbolOffset: [0, -6], // 图形偏移
          symbolPosition: 'end', // 图形位置
          z: 12, // z轴层叠顺序
          color: '#189BF5', // 颜色
          data: this.resourceData, // 数据
        },
        // 内部柱子-底部圆配置
        {
          name: '底部圆',
          type: 'pictorialBar',
          silent: true, // 不显示提示信息
          symbolSize: [55, 10], // 图形大小
          symbolOffset: [0, 7], // 图形偏移
          z: 12, // z轴层叠顺序
          color: '#007AFF', // 颜色
          data: this.resourceData, // 数据
        },
      ],
    };
  },
},

5. 样式定义

最后,我们为组件添加一些基本的样式。

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

总结

通过上述步骤,我们成功封装了一个圆柱柱状图组件。这个组件可以很容易地集成到任何Vue项目中,并且可以根据需要进行定制和扩展。封装组件不仅提高了开发效率,还使得代码更加简洁和易于维护。

希望本文能够帮助你更好地理解和实现圆柱柱状图的封装组件。如果你有任何问题或建议,请随时在评论区留言,我们一起讨论和学习。

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ECharts是一个基于JavaScript的开源可视化库,用于构建交互式的数据可视化图表。它提供了丰富的图表类型和灵活的配置选项,可以帮助开发者轻松地创建各种各样的图表,包括立体圆柱图。 立体圆柱图是一种常见的数据可视化图表,它通过圆柱的高度来表示数据的大小,并且可以通过不同的颜色或纹理来区分不同的数据系列。立体圆柱图通常用于展示多个类别或维度之间的比较关系,例如不同产品的销售量对比、不同地区的人口统计等。 在ECharts中,可以使用柱状图(bar)系列来创建立体圆柱图。通过设置柱状图的三维效果(bar3D)属性,可以将柱状图呈现为立体效果。可以通过调整柱状图的高度、颜色、透明度等属性来定制立体圆柱图的外观。 以下是使用ECharts创建立体圆柱图的示例代码: ```javascript // 引入ECharts库 import echarts from 'echarts'; // 创建一个具有立体效果柱状图实例 const chart = echarts.init(document.getElementById('chart')); // 配置图表选项 const options = { tooltip: {}, xAxis3D: {}, yAxis3D: {}, zAxis3D: {}, grid3D: {}, series: [{ type: 'bar3D', data: [ [0, 0, 0, 10], // [x, y, z, value] [1, 0, 0, 20], [2, 0, 0, 30], // ... ], shading: 'lambert', // 着色方式 label: { show: true, textStyle: { fontSize: 16, borderWidth: 1, }, }, itemStyle: { opacity: 0.8, }, }], }; // 渲染图表 chart.setOption(options); ``` 这是一个简单的立体圆柱图的示例,你可以根据自己的需求进行配置和定制。如果你想了解更多关于ECharts的使用和立体圆柱图的详细信息,可以参考ECharts官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值