vue echarts 三维折线图

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

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

<script>
import * as echarts from 'echarts';
import 'echarts-gl'
export default {
  name: "hello",
  mounted() {
   this.drewLine()
  },
  methods:{
    drewLine(){
      let data = [
        [0,0,0,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1],
        [0,0,1,1,5,7,9,11,12,13,17,17, 17,17,17,17,17,17,17,17,17,17],
        [5,6,9,9,9,11,11,11,13,13,14,14, 14,16,16,16,16,16,18,18,18,18],
        [13,17,22,22,26,33,34,36,36, 37,39,40,40,42,42,42,43,43,44,44,44,44],
        [13,16,17,27,35,45, 49,53,58,61,65,66,68, 69,71,73,73,73,74,74,74,74]
      ]
      let dataX = ['1/27', '1/28','1/29','1/30','1/31','2/1','2/2','2/3','2/4','2/5','2/6','2/7','2/8','2/9','2/10','2/11','2/12','2/13','2/14','2/15','2/16','2/17']
      let dataY = ['生产','收购','运输','销售','消费']
      var vdata = []
      for (var i=0;i<dataY.length;i++){
        vdata[i] = []
      }
      for(var t=0;t<dataY.length;t++){
        var y = dataY[t];
        for(var k=0;k<data[0].length;k++){
          for(var p=0;p<dataX.length;p++){
            var x = dataX[p];
            var z = data[t][p];
            vdata[t].push([x,y,z]);
          }
          break;
        }
      }
      var chart = echarts.init(document.getElementById('main'));
      chart.setOption({
        xAxis3D: {
          type: 'category',
          name: '',
          data: dataX,
          axisLabel:{
            show: true,
            interval: 0  //使x轴都显示
          }
        },
        yAxis3D: {
          type: 'category',
          name: '',
          data: dataY,
          axisLabel:{
            show: true,
            interval: 0   //使y轴都显示
          }
        },
        zAxis3D: {
          type: 'value',
          name: ''
        },
        //图例
        legend: {
          orient: 'vertical',
          right: 50,
          top: 200,
          icon: 'roundRect',
          textStyle:{
            color: '#2c3e50'
          }
        },
        tooltip:{
          show:true
        },
        grid3D: {
          boxWidth: 300,
          boxHeight:120,
          boxDepth: 200,
          axisLine: {
            show: true,
            interval: 0,
            lineStyle: {
              color: '#2c3e50'
            }
          },
          viewControl: {
            distance: 400
          }
        },
        series:[
          {
            type: 'scatter3D',
            name: '生产',
            itemStyle: {
              color: 'rgb(165,  0, 38)'
            },
            label: {  //当type为scatter3D时有label出现
              show: true,
              position: 'top',   //标签的位置,也就是data中数据相对于线在哪个位置
              distance: 0,
              textStyle: {
                color: '#2c3e50',
                fontSize: 12,
                borderWidth: 0,
                borderColor: '#2c3e50',
                backgroundColor: 'transparent'
              }
            },
            data: vdata[0]
          },
          {
            type: 'scatter3D',
            name: '收购',
            itemStyle:{
              color: 'rgb(215, 48, 39)'
            },
            label: {
              show:true,
              position: 'bottom',
              distance : 0,
              textStyle: {
                color: '#2c3e50',
                fontSize: 12,
                borderWidth: 0,
                borderColor: '#2c3e50',
                backgroundColor: 'transparent'
              }
            },
            data:vdata[1]
          },
          {
            type: 'scatter3D',
            name: '运输',
            itemStyle:{
              color: 'rgb(254,224,144)'
            },
            label: {
              show:true,
              position: 'bottom',
              distance : 0,
              textStyle:{
                color:'#2c3e50',
                fontSize: 12,
                borderWidth: 0,
                borderColor: '#2c3e50',
                backgroundColor: 'transparent'
              }
            },
            data:vdata[2]
          },
          {
            type: 'scatter3D',
            name: '销售',
            itemStyle:{
              color: 'rgb(255,255,191)'
            },
            label: {
              show:true,
              position: 'top',
              distance : 0,
              textStyle:{
                color:'#2c3e50',
                fontSize: 12,
                borderWidth: 0,
                borderColor: '#2c3e50',
                backgroundColor: 'transparent'
              }
            },
            data:vdata[3]
          },
          {
            type: 'scatter3D',
            name: '消费',
            itemStyle: {
              color: 'rgb(224,243,248)'
            },
            label: {
              show: true,
              position: 'bottom',
              distance: 0,
              textStyle: {
                color: '#2c3e50',
                fontSize: 12,
                borderWidth: 0,
                borderColor: '#2c3e50',
                backgroundColor: 'transparent'
              }
            },
            data: vdata[4]
          },
          {
            type: 'line3D', //当type为line3D时有label没有作用,官网没有label这个配置项
            name: '生产',
            lineStyle: {
              width: 8,   //线的宽度
              color: 'rgb(165,  0, 38)'   //线的颜色
            },
            data:vdata[0]   //线数据和点数据所需要的格式一样
          },
          {
            type: 'line3D',
            name: '收购',
            lineStyle: {
              color: 'rgb(215, 48, 39)',  //线的颜色
              width: 8     //线的宽度
            },
            data:vdata[1]
          },
          {
            type: 'line3D',
            name: '运输',
            lineStyle: {
              color: 'rgb(254,224,144)',
              width: 8
            },
            data:vdata[2]
          },
          {
            type: 'line3D',
            name: '销售',
            lineStyle: {
              color: 'rgb(255,255,191)',
              width: 8
            },
            data:vdata[3]
          },
          {
            type: 'line3D',
            name: '消费',
            lineStyle: {
              color: 'rgb(224,243,248)',
              width: 8
            },
            data:vdata[4]
          },
        ]
      })
      window.addEventListener('resize', function () {
        chart.resize();
      });
    }
  }
}
</script>

<style scoped>
.div{
  background-color: #2c3e50;
}
</style>```

### Vue3 中 ECharts 按需引入 3D 柱状图 为了在 Vue3 应用程序中按需引入 ECharts 的 3D 柱状图组件,需要遵循特定的配置方法。这不仅减少了打包体积,还提高了应用性能。 #### 安装必要的依赖包 首先,在项目根目录下执行命令来安装 `echarts` 和其扩展库 `echarts-gl`: ```bash npm install echarts echarts-gl --save ``` #### 创建图表实例并初始化 创建一个新的 Vue 组件文件用于展示 3D 柱状图,并在其内部定义模板结构以及脚本逻辑。确保 HTML 部分包含了一个具有唯一引用名 (`ref`) 的 div 元素作为绘图区域[^3]。 ```html <template> <div ref="chartContainer" class="chart-container"></div> </template> <script lang="ts"> import { defineComponent, onMounted, ref } from 'vue'; // 按需加载核心模块和其他必需项 import * as echarts from 'echarts/core'; // 引入柱状图系列类型的定义 import { BarChart, type BarSeriesOption } from 'echarts/charts'; // 引入提示框,标题,直角坐标系组件 import { TitleComponent, TooltipComponent, GridComponent, VisualMapComponent } from 'echarts/components'; // 标签自动布局,全局过渡动画等特性 import { LabelLayout, UniversalTransition } from 'echarts/features'; // Canvas 渲染器 import { CanvasRenderer } from 'echarts/renderers'; // 注册所需的组件到 echarts 实例中去 echarts.use([ TitleComponent, TooltipComponent, GridComponent, VisualMapComponent, BarChart, LabelLayout, UniversalTransition, CanvasRenderer ]); export default defineComponent({ name: 'ThreeDimensionalBar', setup() { const chartContainer = ref<HTMLDivElement | null>(null); onMounted(() => { if (chartContainer.value) { let myChart = echarts.init(chartContainer.value); // 设置初始选项 var option = { title: { text: '3D 柱状图' }, tooltip: {}, visualMap: { max: 20, inRange: { color: ['#313695', '#4575b4', '#74add1'] } }, xAxis3D: { type: 'category',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值