Vue---Echarts

news2025/1/8 2:19:07

项目需要用echarts来做数据展示,现记录vue3引入并使用echarts的过程。

1. 使用步骤

  1. 安装 ECharts:使用 npm 或 yarn 等包管理工具安装 ECharts。

    npm install echarts
    ```
    
    
  2. 在 Vue 组件中引入 ECharts:在需要使用图表的 Vue 组件中,引入 echarts 模块。

    import * as echarts from 'echarts';
    ```
    
    
  3. 创建图表容器:在组件的模板中创建一个容器元素,用于渲染图表。

    <template>
      <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
    </template>
    ```
    
    
  4. 在组件的 setup 函数中,获取图表容器的 DOM 元素,并创建图表实例。

    import { ref, onMounted } from 'vue';
    
    export default {
      setup() {
        const chartContainer = ref<HTMLElement | null>(null);
    
        onMounted(() => {
          if (chartContainer.value) {
            const chartInstance = echarts.init(chartContainer.value);
            // 在 chartInstance 上进行图表的配置和数据处理
          }
        });
    
        return {
          chartContainer,
        };
      },
    };
    ```
    
    在 `setup` 函数中,我们使用 `ref` 创建了一个响应式的 `chartContainer` 变量来引用图表容器的 DOM 元素。
    
    在 `onMounted` 钩子函数中,我们可以获取到图表容器的 DOM 元素,并使用 `echarts.init` 方法创建图表实例。接下来,你可以在 `chartInstance` 上进行图表的配置和数据处理。
    
    
  5. 配置和绘制图表:在 chartInstance 上进行图表的配置和数据处理,然后调用 chartInstance.setOption 方法将配置应用到图表上。

    import { ref, onMounted } from 'vue';
    import * as echarts from 'echarts';
    
    export default {
      setup() {
        const chartContainer = ref<HTMLElement | null>(null);
    
        onMounted(() => {
          if (chartContainer.value) {
            const chartInstance = echarts.init(chartContainer.value);
    
            const options = {
              // 图表的配置项和数据
              // 可根据 ECharts 的文档和示例进行配置
              // 例如:title、xAxis、yAxis、series 等配置项
            };
    
            chartInstance.setOption(options);
          }
        });
    
        return {
          chartContainer,
        };
      },
    };
    ```
    
    在 `options` 对象中,你可以根据 ECharts 的文档和示例配置图表的各种选项,例如标题、坐标轴、系列数据等。然后,使用 `chartInstance.setOption` 方法将配置应用到图表上。
    
    
  6. 在模板中渲染图表容器:在组件的模板中使用 v-bind 将图表容器绑定到 chartContainer 变量。

    <template>
      <div v-bind:ref="chartContainer" style="width: 100%; height: 400px;"></div>
    </template>
    ```
    
    这样,图表容器就会被渲染出来,并在 `onMounted` 钩子函数中初始化和绘制图表。
    

然后可以根据 ECharts 的文档和示例,进一步配置和定制图表,接下来是常见的图表使用。

2. 常见图表使用

     2.1.  折线图(Line Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          xAxis: {
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
          },
          yAxis: {
            type: 'value',
          },
          series: [
            {
              type: 'line',
              data: [120, 200, 150, 80, 70, 110, 130],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
     2.2. 柱状图(Bar Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          xAxis: {
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
          },
          yAxis: {
            type: 'value',
          },
          series: [
            {
              type: 'bar',
              data: [120, 200, 150, 80, 70, 110, 130],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
     2.3. 饼状图(Pie Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          series: [
            {
              type: 'pie',
              data: [
                { value: 335, name: 'Direct' },
                { value: 310, name: 'Email' },
                { value: 234, name: 'Affiliate' },
                { value: 135, name: 'Video Ads' },
                { value: 1548, name: 'Search Engine' },
              ],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
     2.4. 散点图(Scatter Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          xAxis: {},
          yAxis: {},
          series: [
            {
              type: 'scatter',
              data: [
                [10.0, 8.04],
                [8.0, 6.95],
                [13.0, 7.58],
                [9.0, 8.81],
                [11.0, 8.33],
                [14.0, 9.96],
                [6.0, 7.24],
                [4.0, 4.26],
                [12.0, 10.84],
                [7.0, 4.82],
                [5.0, 5.68],
              ],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
    2.5. 雷达图(Radar Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          radar: {
            indicator: [
              { name: 'Sales', max: 6500 },
              { name: 'Administration', max: 16000 },
              { name: 'Information Technology', max: 30000 },
              { name: 'Customer Support', max: 38000 },
              { name: 'Development', max: 52000 },
              { name: 'Marketing', max: 25000 },
            ],
            series: [
              {
                type: 'radar',
                data: [
                  {
                    value: [4200, 3000, 20000, 35000, 50000, 18000],
                    name: 'Allocated Budget',
                  },
                  {
                    value: [5000, 14000, 28000, 26000, 42000, 21000],
                    name: 'Actual Spending',
                  },
                ],
              },
            ],
          },
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
    2.6. 面积图(Area Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          xAxis: {
            type: 'category',
            boundaryGap: false,
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
          },
          yAxis: {
            type: 'value',
          },
          series: [
            {
              type: 'line',
              areaStyle: {},
              data: [820, 932, 901, 934, 1290, 1330, 1320],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
    2.7. 仪表盘(Gauge Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          series: [
            {
              type: 'gauge',
              detail: { formatter: '{value}%' },
              data: [{ value: 50, name: 'Completion Rate' }],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>
    2.8. 漏斗图(Funnel Chart)
<template>
  <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

<script>
import { ref, onMounted } from 'vue';
import * as echarts from 'echarts';

export default {
  setup() {
    const chartContainer = ref<HTMLElement | null>(null);

    onMounted(() => {
      if (chartContainer.value) {
        const chartInstance = echarts.init(chartContainer.value);

        const options = {
          series: [
            {
              type: 'funnel',
              data: [
                { value: 60, name: 'Step 1' },
                { value: 40, name: 'Step 2' },
                { value: 20, name: 'Step 3' },
                { value: 80, name: 'Step 4' },
                { value: 100, name: 'Final Step' },
              ],
            },
          ],
        };

        chartInstance.setOption(options);
      }
    });

    return {
      chartContainer,
    };
  },
};
</script>

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

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

相关文章

探索数据之美:深入学习Plotly库的强大可视化

1. 引言&#xff1a; Plotly 是一个交互性可视化库&#xff0c;可以用于创建各种漂亮的图表和仪表板。它支持多种编程语言&#xff0c;包括Python、R、JavaScript。在Python中&#xff0c;Plotly提供了Plotly Express和Graph Objects两个主要的绘图接口。 2. Plotly库简介&am…

第九节HarmonyOS 常用基础组件1-Text

一、组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声名式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;基础组件…

优化生产流程,开启智能制造新时代——探索MES生产管理系统的优势

在当今高度竞争且日益全球化的制造业环境中&#xff0c;企业需要不断提升生产效率&#xff0c;同时也要降低成本。作为一种先进的生产管理工具&#xff0c;MES生产管理系统正在全球范围内受到制造业的广泛关注。本文将深入探讨MES生产管理系统的优势以及如何帮助企业实现这些目…

00后卷王真的很卷吗?

前言 都在传00后躺平、整顿职场&#xff0c;但该说不说&#xff0c;是真的卷&#xff0c;感觉我都要被卷废了... 前段时间&#xff0c;公司招了一个年轻人&#xff0c;其中有一个是00后&#xff0c;工作才一年多&#xff0c;直接跳槽到我们公司&#xff0c;薪资据说有18K&…

时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标)

时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标) 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标)预测效果基本介绍环境准备程序设计参考资料预测效果 基本介绍

分享4个工具,轻松搞定PDF和图像中提取文本

大型语言模型已经席卷了互联网&#xff0c;导致更多的人没有认真关注使用这些模型最重要的部分&#xff1a;高质量的数据&#xff01; 本文旨在提供一些有效从任何类型文档中提取文本的技术。 Python库 本文专注于Pytesseract、easyOCR、PyPDF2和LangChain库。实验数据是一个…

新功能?浅谈nuclei的反制思路

code新功能&#xff1f; 写poc时&#xff0c;习惯性查官方文档的时候&#xff0c;注意到了一个新的功能&#xff1a;code 链接直达&#xff1a;https://docs.projectdiscovery.io/templates/protocols/code 大概翻译下&#xff1a; Nuclei 支持在主机操作系统上执行外部代码。…

MySQL- CRUD-单表查询

一、INSERT 添加 公式 INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]); 示例&#xff1a; CREATE TABLE goods (id INT ,good_name VARCHAR(10),price DOUBLE ); #添加数据 INSERT INTO goods (id,good_name,price ) VALUES (20,华为手机,…

基于linux的C语言环境下开源hashmap的使用与测试

C语言中没有C语言中map键值对容器的数据结构&#xff0c;为在C语言中提供一种hashmap数据结构&#xff0c;并提供hashmap的操作方法&#xff0c;具体包括新建、释放、清除、获得缓存数据量、设置数据、获取数据、浏览数据等操作&#xff0c;基于hashmap的开源代码很丰富&#x…

基于通义千问和向量数据构建问答知识库

参考&#xff1a;Java从0到1构建基于ChatGPT向量数据库的检索增强生成模型RAG-02 - 知乎 (zhihu.com) 1、先开通 阿里云的向量检索服务 如何开通向量检索服务并创建API-KEY_向量检索服务-阿里云帮助中心 (aliyun.com) 按流程申请 最后需要申请API-KEY 安装DashVector SDK M…

jetpack compose——圆角、渐变

一、背景圆角、渐变 效果图&#xff1a; 代码为&#xff1a; Box(modifier Modifier.clip(RoundedCornerShape(14.dp)) // 设置圆角半径.background(brush Brush.horizontalGradient( // 设置渐变色listOf(Color(0xFFF5DEC9),Color(0xFFF7A74C),))).constrainAs(box_bottom…

SQL Server 数据库,为products表添加数据

在插入数据的时候&#xff0c;需要注意以下事项。 > 每次插入一整行数据&#xff0c;不可能只插入半行或几列数据。 > 数据值的数目必须与列数相同&#xff0c;每个数据值的数据类型、精度和小数位数也必须与相应的 列匹配。 > INSERT语句不能为标识列指定值&#…

java实战(五):理解多线程与多线程实现冒泡排序及可视化

多线程 1.多线程理解1.1线程概念1.2线程的创建和启动1.3线程的同步与互斥1.4线程的状态和生命周期1.5线程间的通信1.6处理线程的异常和错误1.7实践 2.效果3.代码 1.多线程理解 1.1线程概念 线程&#xff1a;计算机中能够执行独立任务的最小单位。在操作系统中&#xff0c;每个…

《YOLOv7原创自研》专栏介绍 CSDN独家改进创新实战专栏目录

YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.html &#x1f4a1;&#x1f4a1;&#x1f4a1;全网独家首发创新&#xff08;原创&#xff09;&#xff0c;适合paper &#xff01;&#xff01;&#xff01; &#x1f4a1;&#x1f4a1;&#x1f4a1;…

Docker下搭建MySQL主从复制

目录 主从复制简介 主从复制搭建 主从复制简介 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数 据库一般是准实时的业务数据库。 主从复制的作用 做数据的热备。作为后备数据库&#xff0c;主数据库服务器故…

AlmaLinux OS 8.6 下载

下载网址 almalinux (sjtu.edu.cn) 选择对应系统版本 打开上面的txt文件 复制下面的连接到浏览器中打开 选择对应镜像下载

Python操作合并单元格

如何使用python操作Excel实现对合并单元格的一系列操作 01、准备工作&#xff08;使用镜像下载&#xff09; pip install openpyx -i https://pypi.tuna.tsinghua.edu.cn/simple 02、简单示例 简单创建一个工作簿进行示范&#xff1a; from openpyxl import Workbook from o…

数学建模 | MATLAB数据建模方法--机器学习方法

近年来&#xff0c;全国赛的题目中&#xff0c;多多少少都有些数据&#xff0c;而且数据量总体来说呈不断增加的趋势&#xff0c; 这是由于在科研界和工业界已积累了比较丰富的数据&#xff0c;伴随大数据概念的兴起及机器学习技术的发展&#xff0c; 这些数据需要转化成更有意…

利用 FormData 实现文件上传、监控网路速度和上传进度

利用 FormData 实现文件上传 基础功能&#xff1a;上传文件 演示如下&#xff1a; 概括流程&#xff1a; 前端&#xff1a;把文件数据获取并 append 到 FormData 对象中后端&#xff1a;通过 ctx.request.files 对象拿到二进制数据&#xff0c;获得 node 暂存的文件路径 前端…

推荐3个完美替代 Navicat 的工具

现在企业&#xff0c;mysql数据库用的比较多&#xff0c;mysql数据库客户端的需求也就比较大&#xff0c;navicat就被大家所熟知。 这个工具&#xff0c;确实好用&#xff0c;功能也非常强大&#xff0c;但是&#xff0c;它的强大&#xff0c;是需要付费&#xff0c;或者用一些…