vue3之echarts3D环柱图

vue3之echarts3D环柱图

效果:
在这里插入图片描述

核心代码:

<template>
    <div class="container">
        <div ref="chartRef" class="charts"></div>
    </div>
</template>

<script lang="ts" setup>
import * as echarts from 'echarts';
import 'echarts-gl';
import {
    reactive, onMounted, ref } from 'vue';

const chartRef = ref(null);
let myChart: any = null;
let option: any = null;

let dataList = reactive({
   
    charts: [
        {
   
            name: '设备故障',
            count: 239,
            color: '#218DFF',
        },
        {
   
            name: '智能识别',
            count: 239,
            color: '#2FFF88',
        },
        {
   
            name: '保修工单',
            count: 239,
            color: '#FFCE2F',
        },
        {
   
            name: '设备报警',
            count: 239,
            color: '#17EDFF ',
        },
    ],
});

const getParametricEquation = (
    startRatio: any,
    endRatio: any,
    isSelected: any,
    isHovered: boolean,
    k: any,
    h: any,
) => {
   
    // 计算
    let midRatio = (startRatio + endRatio) / 2;

    let startRadian = startRatio * Math.PI * 2;
    let endRadian = endRatio * Math.PI * 2;
    let midRadian = midRatio * Math.PI * 2;

    // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
    k = 1 / 10;

    // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
    let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
    let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
    let index = 0;
    if (h === 0) {
   
        index = 6;
        h = 1;
    } else 
### 如何在Vue3中使用ECharts创建3D #### 安装依赖包 为了能够在Vue3项目中使用ECharts并支持3D形,需要先安装`echarts`及其核心模块和3D组件。 ```bash npm install echarts --save ``` 对于3D表的支持,则需额外引入相应的扩展: ```bash npm install echarts-gl --save ``` 这确保了境中有必要的工具来构建复杂的三维视觉效果[^1]。 #### 初始化配置 接着,在项目的入口文件(main.js)里全局注册ECharts以便于后续方便调用。如果是在单页应用(SPA)场景下工作,也可以考虑局部导入的方式减少打包体积。 ```javascript import * as ECharts from &#39;echarts/core&#39;; // 导入所需系列类型的定义 import { BarChart } from &#39;echarts/charts&#39;; // 导入提示框,标题,直角坐标系组件 import { TitleComponent, TooltipComponent, GridComponent } from &#39;echarts/components&#39;; // 标签自动布局,内置形状等 import { LabelLayout, UniversalTransition } from &#39;echarts/features&#39;; // Canvas 渲染器 import { CanvasRenderer } from &#39;echarts/renderers&#39;; // 注册必须的组件到 ECharts 对象上 ECharts.use([TitleComponent, TooltipComponent, GridComponent, BarChart, LabelLayout, UniversalTransition, CanvasRenderer]); export default defineNuxtPlugin((nuxtApp) => { nuxtApp.vueApp.config.globalProperties.$echarts = ECharts; }); ``` 这段代码展示了如何通过按需加载的形式只引入需要用到的部分,从而优化性能[^2]。 #### 编写组件逻辑 下面是一个具体的例子展示怎样利用上述设置好的基础去制作一个简单的3D。这里假设已经有一个名为`<template>`标签内的DOM容器用于承载最终呈现出来的表。 ```html <div id="main" style="width: 600px;height:400px;"></div> <script setup lang="ts"> import { ref, onMounted } from &#39;vue&#39; import * as echarts from &#39;echarts&#39; const chartDom = document.getElementById(&#39;main&#39;)!; let myChart = echarts.init(chartDom); var option; onMounted(() => { const data = [ [{value: Math.round(Math.random() * 100)}, ...new Array(7).fill(null)], [...Array(8).keys()].map(i=>({name:`Category ${i}`, value:[Math.round(Math.random()*10), i]})) ]; option = { title: { text: &#39;3D &#39;, subtext: &#39;&#39; }, tooltip: {}, xAxis3D: { type: &#39;category&#39;, data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;] }, yAxis3D: { type: &#39;category&#39;, data: [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;] }, zAxis3D: { type: &#39;value&#39; }, grid3D: {}, series: [{ type: &#39;bar3D&#39;, data: (function () { var d = []; for (var i = 0; i < 8; ++i) { for (var j = 0; j < 7; ++j) { d.push([ j, // X轴上的位置 i, // Y轴上的位置 Math.floor(Math.random() * 50 + 1)// Z轴高度随机数 ]); } } return d; })(), shading: &#39;lambert&#39; }] }; function renderChart(){ if (option && typeof option === &#39;object&#39;) { myChart.setOption(option); } } window.addEventListener(&#39;resize&#39;,myChart.resize); renderChart(); }) </script> ``` 此脚本片段说明了初始化过程中的几个重要节:获取目标节点、实例化表对象、准备数据集以及设定绘选项。特别注意的是`series`部分指定了要绘制的具体类型为`&#39;bar3D&#39;`,并且提供了生成立体条形所需的多维数组作为输入[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值