echarts3D柱状图,多个柱子,单个柱子,传参即可

news2025/1/23 6:20:17

 

<template>
  <!-- 折线图 -->
  <div ref="line" class="line"></div>
</template>

<script>
// colorList  横条颜色数组
// data 数据 格式为: []
// areaStyle 渐变色
import * as echarts from 'echarts'
import { onMounted, reactive, toRefs, ref, watch } from 'vue'
export default {
  props: {
    areaStyle: {
      type: Array,
      default: null
    },
    data: {
      type: Array,
      default: () => {
        return []
      }
    },
    yAxisTitle: {
      type: String,
      default: '能耗:(MV)'
    },
    gridData: {
      type: Object,
      default: () => {
        return {
          left: '10%',
          top: '15%',
          right: '3%',
          bottom: '12%'
        }
      }
    }
  },
  setup(props) {
    let line = ref('')
    const state = reactive({})

    // let series = []
    // props.data.forEach(item => {
    //   series.push({
    //     name: item.name,
    //     data: item.data,
    //     type: 'line',
    //     areaStyle: {
    //       opacity: 0.5,
    //       color: new echarts.graphic.LinearGradient(0, 0, 0, 1, item.areaStyle ? item.areaStyle : null)
    //     }
    //   })
    // })
    const methods = {
      drawLine() {
        // 初始化
        var myChart = echarts.init(line.value)
        // 配置项
        var normalColor = '#fff'
        var fontSize = 16
        var datas = props.data
        let option = {
          tooltip: {
            trigger: 'item',
            show: true
          },
          grid: {
            left: '10%',
            top: '15%',
            right: '3%',
            bottom: props.data.bottom ? props.data.bottom : '12%'
          },
          animation: false, //去除加载时缓动动画
          legend: {
            show: true,
            selectedMode: false, //取消图例上的点击事件
            data: datas.legendData,
            textStyle: {
              color: '#fff',
              fontSize: 20
            }
          },
          xAxis: {
            axisLine: {
              lineStyle: {
                color: normalColor
              }
            },
            axisTick: {
              show: true
            },
            axisLabel: {
              textStyle: {
                color: normalColor,
                fontSize: fontSize,
                fontWeight: '700'
              },
              margin: 20
            },
            splitLine: {
              show: false,
              lineStyle: {
                type: 'dashed',
                color: normalColor
              }
            },
            data: datas.xdata
          },
          yAxis: [
            {
              type: 'value',
              name: props.data.ytitle ? props.data.ytitle : '能耗:(MV)',
              nameTextStyle: {
                color: '#fff',
                fontSize: '15px'
              },
              color: normalColor,
              axisTick: {
                show: false
              },
              splitLine: {
                show: false,
                lineStyle: {
                  color: '#384267',
                  type: 'dashed'
                }
              },
              axisLabel: {
                show: props.data.yline != false ? true : false,
                formatter: '{value}',
                textStyle: {
                  color: normalColor,
                  fontSize: fontSize
                }
              },
              axisLine: {
                lineStyle: {
                  color: '#384267',
                  width: 1,
                  type: 'dashed'
                },
                show: props.data.yline != false ? true : false
              }
            },
            {
              type: 'value',
              name: '单位:',
              show: false,
              nameTextStyle: {
                fontSize: fontSize
              },
              color: normalColor,
              axisTick: {
                show: false
              },
              splitLine: {
                show: false
              },
              axisLabel: {
                formatter: '{value}',
                textStyle: {
                  color: normalColor,
                  fontSize: fontSize
                }
              },
              axisLine: {
                lineStyle: {
                  color: normalColor
                }
              }
            }
          ],
          series: [
            {
              name: props.data.legendData[0] ? props.data.legendData[0] : null,
              data: props.data.Data1 ? props.data.Data1 : null,
              type: 'bar',
              barWidth: 20,
              itemStyle: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  type: 'linear',
                  global: false,
                  colorStops: [
                    {
                      offset: 0,
                      color: props.data.color[0] ? props.data.color[0] : '#3A1BFD'
                    },
                    {
                      offset: 1,
                      color: props.data.color[1] ? props.data.color[1] : '#3BEFFD'
                    }
                  ]
                }
              },
              label: {
                show: true,
                position: 'top',
                distance: 10,
                color: '#fff'
              }
            },
            {
              name: props.data.legendData[1] ? props.data.legendData[1] : null,
              data: props.data.Data2 ? props.data.Data2 : null,
              type: 'bar',
              barWidth: 20,
              itemStyle: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  type: 'linear',
                  global: false,
                  colorStops: [
                    {
                      offset: 0,
                      color: props.data.color[2] ? props.data.color[2] : 'rgba(	255, 69, 0,1)'
                    },
                    {
                      offset: 1,
                      color: props.data.color[3] ? props.data.color[3] : 'rgba(	255, 69, 0,0.31)'
                    }
                  ]
                }
              },
              label: {
                show: true,
                position: 'top',
                distance: 10,
                color: '#fff'
              }
            },
            {
              name: props.data.legendData[2] ? props.data.legendData[2] : null,
              data: props.data.Data3 ? props.data.Data3 : null,
              type: 'bar',
              barWidth: 20,
              itemStyle: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  type: 'linear',
                  global: false,
                  colorStops: [
                    {
                      offset: 0,
                      color: props.data.color[4] ? props.data.color[4] : 'rgba(	50, 205, 50, 1)'
                    },
                    {
                      offset: 1,
                      color: props.data.color[5] ? props.data.color[5] : 'rgba(	50, 205, 50, 0.3)'
                    }
                  ]
                }
              },
              label: {
                show: true,
                position: 'top',
                distance: 10,
                color: '#fff'
              }
            },
            {
              name: props.data.legendData[3] ? props.data.legendData[3] : null,
              data: props.data.Data4 ? props.data.Data4 : null,
              type: 'bar',
              barWidth: 20,
              itemStyle: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  type: 'linear',
                  global: false,
                  colorStops: [
                    {
                      offset: 0,
                      color: props.data.color[6] ? props.data.color[6] : 'rgba(138,43,226,1)'
                    },
                    {
                      offset: 1,
                      color: props.data.color[7] ? props.data.color[7] : 'rgba(138,43,226,0.3)'
                    }
                  ]
                }
              },
              label: {
                show: true,
                position: 'top',
                distance: 10,
                color: '#fff'
              }
            },
            {
              name: props.data.legendData[4] ? props.data.legendData[4] : null,
              data: props.data.Data5 ? props.data.Data5 : null,
              type: 'bar',
              barWidth: 20,
              itemStyle: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  type: 'linear',
                  global: false,
                  colorStops: [
                    {
                      offset: 0,
                      color: props.data.color[8] ? props.data.color[8] : 'rgba(255,140,0,1)'
                    },
                    {
                      offset: 1,
                      color: props.data.color[9] ? props.data.color[9] : 'rgba(255,140,0,0.3)'
                    }
                  ]
                }
              },
              label: {
                show: true,
                position: 'top',
                distance: 10,
                color: '#fff'
              }
            },
            {
              name: props.data.legendData[5] ? props.data.legendData[5] : null,
              data: props.data.Data6 ? props.data.Data6 : null,
              type: 'bar',
              barWidth: 20,
              itemStyle: {
                color: {
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  type: 'linear',
                  global: false,
                  colorStops: [
                    {
                      offset: 0,
                      color: props.data.color[10] ? props.data.color[10] : 'rgba(255, 20, 147,1)'
                    },
                    {
                      offset: 1,
                      color: props.data.color[11] ? props.data.color[11] : 'rgba(255, 20, 147,0.3)'
                    }
                  ]
                }
              },
              label: {
                show: true,
                position: 'top',
                distance: 10,
                color: '#fff'
              }
            },
            // 以上是数据
            {
              // 第六个柱子底部正方形
              name: '',
              data: props.data.Data6 ? props.data.Data6 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbol: 'diamond',
              symbolOffset: ['200%', '50%'],
              symbolSize: [30, 15],
              color: props.data.color[11] ? props.data.color[11] : 'rgba(255, 20, 147, 0.3)'
            },
            {
              // 第六个柱子顶部正方形
              name: '',
              data: props.data.Data6 ? props.data.Data6 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbolPosition: 'end',
              symbol: 'diamond',
              symbolOffset: ['60', '-50%'],
              symbolSize: [20, 12],
              zlevel: 2,
              color: props.data.color[10] ? props.data.color[10] : 'rgba(255, 20, 147,1)'
            },
            {
              // 第五个柱子底部正方形
              name: '',
              data: props.data.Data5 ? props.data.Data5 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbol: 'diamond',
              symbolOffset: ['120%', '50%'],
              symbolSize: [30, 15],
              color: props.data.color[9] ? props.data.color[9] : 'rgba(255,140,0, 0.3)'
            },
            {
              // 第五个柱子顶部正方形
              name: '',
              data: props.data.Data5 ? props.data.Data5 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbolPosition: 'end',
              symbol: 'diamond',
              symbolOffset: ['36', '-50%'],
              symbolSize: [20, 12],
              zlevel: 2,
              color: props.data.color[8] ? props.data.color[8] : 'rgba(255,140,0,1)'
            },

            {
              // 第四个柱子底部正方形
              name: '',
              data: props.data.Data4 ? props.data.Data4 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbol: 'diamond',
              symbolOffset: ['40%', '50%'],
              symbolSize: [30, 15],
              color: props.data.color[7] ? props.data.color[7] : 'rgba(138,43,226, 0.3)'
            },
            {
              // 第四个柱子顶部正方形
              name: '',
              data: props.data.Data4 ? props.data.Data4 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbolPosition: 'end',
              symbol: 'diamond',
              symbolOffset: ['12', '-50%'],
              symbolSize: [20, 12],
              zlevel: 2,
              color: props.data.color[6] ? props.data.color[6] : 'rgba(138,43,226, 1)'
            },
            {
              // 第三个柱子底部正方形
              name: '',
              data: props.data.Data3 ? props.data.Data3 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbol: 'diamond',
              symbolOffset: ['-40%', '50%'],
              symbolSize: [30, 15],
              color: props.data.color[5] ? props.data.color[5] : 'rgba(50,205,50, 0.3)'
            },
            {
              // 第三个柱子顶部正方形
              name: '',
              data: props.data.Data3 ? props.data.Data3 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbolPosition: 'end',
              symbol: 'diamond',
              symbolOffset: ['-12', '-50%'],
              symbolSize: [20, 12],
              zlevel: 2,
              color: props.data.color[4] ? props.data.color[4] : 'rgba(50,205,50, 1)'
            },
            {
              // 第二个柱子底部正方形
              name: '',
              data: props.data.Data2 ? props.data.Data2 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbol: 'diamond',
              symbolOffset: ['-120%', '50%'],
              symbolSize: [30, 15],
              color: props.data.color[3] ? props.data.color[3] : 'rgba(255,69,0,0.3)'
            },
            {
              // 第二个柱子顶部正方形
              name: '',
              data: props.data.Data2 ? props.data.Data2 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbolPosition: 'end',
              symbol: 'diamond',
              symbolOffset: ['-35', '-50%'],
              symbolSize: [20, 12],
              zlevel: 2,
              color: props.data.color[2] ? props.data.color[2] : 'rgba(255,69,0,1)'
            },
            {
              // 第一个底部正方形
              name: '',
              data: props.data.Data1 ? props.data.Data1 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbol: 'diamond',
              symbolOffset: ['-300%', '50%'],
              symbolSize: [20, 15],
              color: props.data.color[1] ? props.data.color[1] : 'rgba(27,252,229,1)'
            },
            {
              // 第一个顶部正方形
              name: '',
              data: props.data.Data1 ? props.data.Data1 : null,
              type: 'pictorialBar',
              barMaxWidth: '20',
              symbolPosition: 'end',
              symbol: 'diamond',
              symbolOffset: ['-60', '-50%'],
              symbolSize: [20, 12],
              zlevel: 2,
              color: props.data.color[0] ? props.data.color[0] : 'rgba(54,8,254,1)'
            }
          ]
        }

        // ===
        myChart.clear()
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option)
        window.onresize = function () {
          myChart.resize()
        }
      }
    }
    onMounted(() => {
      methods.drawLine()
    })

    watch(
      props,
      newVal => {
        if (newVal) {
          methods.drawLine() //调用ECharts的方法重新绘制
        }
      },
      {
        // 被侦听的内容需要是函数的写法 () => stuInfo.friend
        deep: true
      }
    )
    return {
      ...toRefs(state),
      ...methods,
      line
    }
  }
}
</script>

<style lang="scss" scoped>
.line {
  width: 100%;
  height: 100%;
}
</style>

注意需要传参

  processBar: {

        xdata: ['炼钢厂', 'H型钢厂', 'ESP', '石灰厂'],

        // Data1: [200, 35, 112, 275],

        // Data2: [80, 35, 112, 275],

        Data3: [200, 35, 112, 275],

        Data4: [80, 35, 112, 275],

        // Data5: [200, 35, 112, 275],

        // Data6: [80, 35, 112, 275],

        legendData: ['', '', '11月', '国标', '', ''],

        color: ['', '', '', '', '', '', 'rgba(255,0,255,1)', 'rgba(255,0,255,0.3)']

      },

颜色和length没有也需要传 传空 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AOT(超前编译)实例分析

文章目录一、背景二、具体实施2.1 tfcomfile 是什么&#xff1f;2.2 tfcompile 的功能是什么&#xff1f;2.3使用tfcompile三、总结一、背景 前边已经了解了JIT和AOT的基本概念&#xff0c;AOT(提前编译)方式就是在代码执行阶段之前全部编译成目标指令&#xff0c;进入执行阶段…

自动网络搜索NAS之FBNetV1

1. 摘要 为移动设备设计卷积网络挑战巨大&#xff0c;因为设计空间巨大&#xff0c;现有NAS方法在计算上是昂贵的。另外&#xff0c;之前的工作关注降低FLOPs&#xff0c;但是FLOPs并不总是反应真实的延迟。因此基于differentiable neural architecture search&#xff08;DNA…

sd卡怎么格式化?5个步骤轻松教会你

随着SD卡的广泛使用&#xff0c;总会有各种情况导致SD卡必须要格式化才行。但是格式化有没有办法执行&#xff0c;sd卡怎么格式化&#xff1f;还有人会因为误操作导致的数据丢失。现在&#xff0c;小编就给大家介绍一下怎么格式化SD卡&#xff1f;以及格式化后SD卡数据的恢复方…

VUE3-模板语法《二》

首先看到这张图&#xff0c;左边的结构就不分析了&#xff0c;上一章有说明顺序。 中间红色的部分&#xff0c;分为3块&#xff0c;第一块是模板&#xff0c;里面写html&#xff1b;第二块是脚本语言&#xff0c;里面写js或者ts语言&#xff0c;lang"ts"就是ts语法…

GreatSQL MGR 使用 IPv6 连接

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;王权富贵文章来源&#xff1a;社区原创 1.概述 本文基于 GreatSQL 8.0.25-16 &#xff0c;以下测试均使用此版…

嵌入式:Load/Store之单寄存器的存取指令

文章目录Load/Store指令分类单寄存器的存取指令1、单字和无符号字节的数据传送指令指令说明指令汇编格式2、半字和有符号字节的数据传送指令指令汇编格式ARM处理器是Load/Store型的&#xff0c;即它对数据的操作是通过将数据从存储器加载到片内寄存器中进行处理&#xff0c;处理…

SuperMap iPortal 对接postgis业务数据库(二):大屏使用接口数据更新图表和地图

本文是SuperMap iPortal 对接postgis业务数据库的第二个步骤&#xff1a;大屏使用接口数据更新图表和地图。 这个步骤可以有两种方式去实现数据的展示和更新如下&#xff1a; 一、使用数据上图构建地图并在大屏中使用 1. 数据上图构建地图 打开iPortal 应用中心的数据上图&a…

教你如何轻松搞定云上打印管理

摘要&#xff1a;加快自主创新&#xff0c;满足数字化用户多场景文印需求。本文分享自华为云社区《有了司印云打印&#xff0c;云上打印管理轻松搞定&#xff01;》&#xff0c;作者&#xff1a;云商店 。 作为与职场和个人办公息息相关的工作场景&#xff0c;打印长期以来都是…

uniapp-uView在离线状态下无法显示icon图标的问题

1、修改uview-ui下的u-icon.vue配置文件&#xff0c;一般目录在 uni_modules\uview-ui\components\u-icon\u-icon.vue 2、源文件引入的是阿里巴巴的icon https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf font-face {font-family: uicon-iconfont;src: url(https://at.…

restful风格快速入门

restful风格入门 概述 简介&#xff1a;REST(Representational State Transfer),表现形式状态转换。 传统风格 http://localhost/users/getById?id1 http://localhost/users/saveUser REST风格 http://localhost/users/1 http://localhost/users 对比&#xff1a; 对比可…

spring-boot sentry 不触发事件

按照官网的提示https://docs.sentry.io/platforms/java/guides/spring-boot/performance/ 一步一步的确认&#xff0c;但是最终就是不触发事件 解决过程&#xff1a; 1.开启debug 在properties文件增加一行 sentry.debugtrue2.运行&#xff0c;查看日志输出。 dsn什么的配…

Android代码保护与反调试方案

1、代码保护方案 1.1、Proguard代码混淆 ProGuard是一个开源的Java代码收缩器&#xff0c;优化器&#xff0c;混淆器和预校验器&#xff0c;ProGuard的作用如下&#xff1a; &#xff08;1&#xff09;压缩(Shrink):检查并移除代码中无用的类、字段、方法&#xff1b; &#…

一键回复聊天软件

不论是何种行业&#xff0c;高效工作都是企业一直在追求的&#xff0c;如果在为客户提供服务的过程中&#xff0c;有一个趁手的好工具是可以带来事半功倍的效果的。 前言 随着互联网的发展&#xff0c;越来越多的工作开始转向线上化&#xff0c;通过网络可以满足客户的多种需求…

手写Srping10(实现容器事件监听)

文章目录目标设计项目结构一、实现1、定义事件接口--ApplicationEvent1、定义通用应用上下文事件--ApplicationContextEvent2、定义刷新和关闭事件--ContextClosedEvent、ContextRefreshedEvent2、定义事件监听--ApplicationListener3、定义事件广播器--ApplicationEventMultic…

audio_open函数分析

audio_open() 的作用&#xff0c;就如同它的名字那样&#xff0c;就是打开音频设备。流程图如下&#xff1a; SDL 库播放音频数据有两种方式。 1&#xff0c;调用层定时往 SDL 接口塞数据。 2&#xff0c;设置SDL回调函数&#xff0c;让 SDL 来主动执行回调函数来取数据。 第…

ABAP 字符处理

场景1:是否只包含数字 str1 CO 0123456789 涉及关键字&#xff1a;CO&#xff0c;使用公式 str1 CO str2 。表示 str1 中 的每个字符 在 str2 中都能找到 类比&#xff1a;无 场景2&#xff1a;字符串1 是否 包含 字符串2 DATA str1 TYPE STRING VALUE hello world. DATA …

Pytest测试框架搭建需求及实现方案

目录 框架需求及实现方案 框架需求 实现方案 支持接口自动化、Web UI自动化及App自动化 可以批量运行用例并生成测试报告 测试完成发送邮件 提供灵活的运行方式&#xff0c;如按功能模块运行、按脚本运行、按用例等级运行等等 提供运行日志方便定位问题 支持切换环境 …

李沐精读论文:MAE 《Masked Autoencoders Are Scalable Vision Learners》

论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 别再无聊地吹捧了&#xff0c;一起来动手实现 MAE(Masked Autoencoders Are Scalable Vision Learners) 玩玩吧&#xff01; - 知乎 参考博文&#xff1a;MAE 论文逐段精读【论文精读】 - 哔哩哔哩 神洛华…

QT 学习笔记(十)

文章目录一、绘图1. 理论知识储备2. 画背景图3. 简单绘图4. 手动刷新窗口二、绘图实现代码1. 主窗口头文件 widget.h2. 主窗口头文件 widget.cpp由于每次代码都是在原有程序上修改&#xff0c;因此除了新建项目&#xff0c;不然一般会在学完后统一展示代码。 提示&#xff1a;具…

【Python机器学习】卷积神经网络卷积层、池化层、Flatten层、批标准化层的讲解(图文解释)

卷积神经网络 卷积神经网络&#xff08;convolutional neural network, CNN&#xff09;在提出之初被成功应用于手写字符图像识别&#xff0c;2012年的AlexNet网络在图像分类任务中取得成功&#xff0c;此后&#xff0c;卷积神经网络发展迅速&#xff0c;现在已经被广泛应用于…