当前位置: 首页 > news >正文

01-echarts如何绘制三维折线图

echarts如何绘制三维折线图

  • 一、相关依赖包
      • 1、下载依赖
      • 2、引入依赖
  • 二、创建图表盒子
      • 1、创建盒子
      • 2、定义数据
      • 3、编写方法
        • 1、初始化盒子
        • 2、设置配置项
        • 3、修改数据格式
        • 4、设置颜色数组
        • 4、设置name数组
        • 5、设置线三维和点三维
        • 6、添加配置项
        • 7、设置图表自适应
      • 4、调用方法
  • 三、整体代码
  • 四、效果

一、相关依赖包

注意点:版本号不一致会报错

1、下载依赖

1、echarts版本号为5.2.0
echarts-gl版本号为2.0.82、echarts版本号为 4.9.0,   echarts-gl版本号为 1.1.2,这两种版本号都可以
二者都需要下载,使用npm下载npm install echarts@5.2.0npm install echarts-gl@2.0.8

2、引入依赖

import * as echarts from 'echarts';
import 'echarts-gl';

二、创建图表盒子

1、创建盒子

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

2、定义数据

我的数据格式是对象里有,x,y,z,和颜色,你们自己的数据格式根据后端返回的格式来修改就可以

 dataList: [[{ x: 0.01, y: 1, z: 0, color: '#d19a66' },{ x: 0.05, y: 1, z: 0.2, color: '#d19a66' },{ x: 0.1, y: 1, z: 0.3, color: '#d19a66' },{ x: 1, y: 1, z: 0.4, color: '#d19a66' },{ x: 1, y: 1, z: 1, color: '#d19a66' },{ x: 2, y: 1, z: 0, color: '#d19a66' },{ x: 3, y: 1, z: 2, color: '#d19a66' },{ x: 4, y: 1, z: 3, color: '#d19a66' },{ x: 5, y: 1, z: 1, color: '#d19a66' },{ x: 6, y: 1, z: 2, color: '#d19a66' },{ x: 7, y: 1, z: 3, color: '#d19a66' },{ x: 8, y: 1, z: 0, color: '#d19a66' },{ x: 9, y: 1, z: 0, color: '#d19a66' },{ x: 12, y: 1, z: 0, color: '#d19a66' },{ x: 19, y: 1, z: 0, color: '#d19a66' },],[{ x: 0, y: 2, z: 0, color: '#d19a66' },{ x: 1, y: 2, z: 0, color: '#d19a66' },{ x: 1, y: 2, z: 1, color: '#d19a66' },{ x: 2, y: 2, z: 0, color: '#d19a66' },{ x: 3, y: 2, z: 2, color: '#d19a66' },{ x: 4, y: 2, z: 3, color: '#d19a66' },{ x: 5, y: 2, z: 1, color: '#d19a66' },{ x: 6, y: 2, z: 2, color: '#d19a66' },{ x: 7, y: 2, z: 3, color: '#d19a66' },{ x: 8, y: 2, z: 0, color: '#d19a66' },{ x: 9, y: 2, z: 0, color: '#d19a66' },{ x: 12, y: 2, z: 0, color: '#d19a66' },{ x: 19, y: 2, z: 0, color: '#d19a66' },],[{ x: 1, y: 3, z: 1, color: '#e06c75' },{ x: 2, y: 3, z: 2, color: '#e06c75' },{ x: 3, y: 3, z: 0, color: '#e06c75' },{ x: 4, y: 3, z: 1, color: '#e06c75' },{ x: 5, y: 3, z: 1, color: '#e06c75' },{ x: 6, y: 3, z: 1, color: '#e06c75' },{ x: 7, y: 3, z: 1, color: '#e06c75' },{ x: 8, y: 3, z: 1, color: '#e06c75' },{ x: 9, y: 3, z: 1, color: '#e06c75' },],],

3、编写方法

我个人的习惯是在methods里面写初始化图表的方法,在mounted钩子函数里面调用这个方法,你们也可以直接写在mounted函数里面

1、初始化盒子
let chart = echarts.init(document.getElementById('main'));
2、设置配置项
let option = {xAxis3D: {type: 'value',name: '',axisLabel: {show: true,interval: 0, //使x轴都显示},},yAxis3D: {type: 'category',name: '',data: [11, 22, 33, 44, 55, 66, 77, 88, 99],axisLabel: {show: true,interval: 0, //使y轴都显示},},zAxis3D: {type: 'value',name: '',},tooltip: {show: true,formatter: function (params) {let content = `X: ${params.value[0]}<br>Y: ${params.value[1]}<br>Z: ${params.value[2]}`;return content;},},grid3D: {boxWidth: 300,boxHeight: 140,boxDepth: 200,axisLine: {show: true,interval: 0,lineStyle: {color: '#2c3e50',},},// 控制灵敏度,数值越大越灵敏viewControl: {distance: 400,rotateSensitivity: 10, // 控制旋转的灵敏度zoomSensitivity: 10, // 控制缩放的灵敏度panSensitivity: 10, // 控制平移的灵敏度},},};
3、修改数据格式

因为所需要的格式是[x,y,z]这样的,所以需要更改我的数据格式

  const convertedDataList = this.dataList.map((series) =>series.map((point) => [point.x, point.y, point.z]));
4、设置颜色数组

因为颜色值是固定的,每一条线是一个颜色,而不是一个点一个颜色,所以需要将颜色单独拿出来

 let series = [];// 设置颜色数组//#regionconst uniqueColorsSet = new Set();this.dataList.forEach((series) => {// 假设每个系列中的所有点都有相同的颜色,只取系列中第一个点的颜色if (series.length > 0) {uniqueColorsSet.add(series[0].color);}});const uniqueColorsArray = Array.from(uniqueColorsSet);
4、设置name数组

设置name数组就是所需要设置legend时需要的

 const uniqueName = new Set();this.dataList.forEach((series) => {// 假设每个系列中的所有点都有相同的颜色,只取系列中第一个的Y轴if (series.length > 0) {uniqueName.add(series[0].y);}});
const uniquNameArray = Array.from(uniqueName);
5、设置线三维和点三维

因为需要鼠标放上去有 tooltip提示,折现三维的话没有,只能使用点三维,所以一条数据中,需要同时设置一个点三维和线三维,循环数据获得

convertedDataList.forEach((item, index) => {let series1 = {type: 'scatter3D',name: uniquNameArray[index],symbolSize: 3,itemStyle: {color: uniqueColorsArray[index],},label: {//当type为scatter3D时有label出现show: true,position: 'top', //标签的位置,也就是data中数据相对于线在哪个位置distance: 0,textStyle: {color: '#2c3e50',fontSize: 12,borderWidth: 0,borderColor: '#2c3e50',backgroundColor: 'transparent',},},data: item,};let series2 = {type: 'line3D', //当type为line3D时有label没有作用,官网没有label这个配置项name: uniquNameArray[index],smooth: true,lineStyle: {width: 5, //线的宽度color: uniqueColorsArray[index], //线的颜色},data: item, //线数据和点数据所需要的格式一样};series.push(series1, series2);});
6、添加配置项
 option.series = series;option && chart.setOption(option);
7、设置图表自适应
 window.addEventListener('resize', function () {chart.resize();});

4、调用方法

  mounted() {this.drewLine();},

三、整体代码

<!-- eslint-disable vue/no-multiple-template-root -->
<template><div><div id="main" style="width: 900px; height: 600px"></div></div>
</template><script>
import * as echarts from 'echarts';
import 'echarts-gl';export default {data() {return {dataList: [[{ x: 0.01, y: 1, z: 0, color: '#d19a66' },{ x: 0.05, y: 1, z: 0.2, color: '#d19a66' },{ x: 0.1, y: 1, z: 0.3, color: '#d19a66' },{ x: 1, y: 1, z: 0.4, color: '#d19a66' },{ x: 1, y: 1, z: 1, color: '#d19a66' },{ x: 2, y: 1, z: 0, color: '#d19a66' },{ x: 3, y: 1, z: 2, color: '#d19a66' },{ x: 4, y: 1, z: 3, color: '#d19a66' },{ x: 5, y: 1, z: 1, color: '#d19a66' },{ x: 6, y: 1, z: 2, color: '#d19a66' },{ x: 7, y: 1, z: 3, color: '#d19a66' },{ x: 8, y: 1, z: 0, color: '#d19a66' },{ x: 9, y: 1, z: 0, color: '#d19a66' },{ x: 12, y: 1, z: 0, color: '#d19a66' },{ x: 19, y: 1, z: 0, color: '#d19a66' },],[{ x: 0, y: 2, z: 0, color: '#d19a66' },{ x: 1, y: 2, z: 0, color: '#d19a66' },{ x: 1, y: 2, z: 1, color: '#d19a66' },{ x: 2, y: 2, z: 0, color: '#d19a66' },{ x: 3, y: 2, z: 2, color: '#d19a66' },{ x: 4, y: 2, z: 3, color: '#d19a66' },{ x: 5, y: 2, z: 1, color: '#d19a66' },{ x: 6, y: 2, z: 2, color: '#d19a66' },{ x: 7, y: 2, z: 3, color: '#d19a66' },{ x: 8, y: 2, z: 0, color: '#d19a66' },{ x: 9, y: 2, z: 0, color: '#d19a66' },{ x: 12, y: 2, z: 0, color: '#d19a66' },{ x: 19, y: 2, z: 0, color: '#d19a66' },],[{ x: 1, y: 3, z: 1, color: '#e06c75' },{ x: 2, y: 3, z: 2, color: '#e06c75' },{ x: 3, y: 3, z: 0, color: '#e06c75' },{ x: 4, y: 3, z: 1, color: '#e06c75' },{ x: 5, y: 3, z: 1, color: '#e06c75' },{ x: 6, y: 3, z: 1, color: '#e06c75' },{ x: 7, y: 3, z: 1, color: '#e06c75' },{ x: 8, y: 3, z: 1, color: '#e06c75' },{ x: 9, y: 3, z: 1, color: '#e06c75' },],],selectSpectrogram: null,};},mounted() {this.drewLine();},methods: {drewLine() {var chart = echarts.init(document.getElementById('main'));let option = {xAxis3D: {type: 'value',name: '',axisLabel: {show: true,interval: 0, //使x轴都显示},},yAxis3D: {type: 'category',name: '',data: [11, 22, 33, 44, 55, 66, 77, 88, 99],axisLabel: {show: true,interval: 0, //使y轴都显示},},zAxis3D: {type: 'value',name: '',},tooltip: {show: true,formatter: function (params) {let content = `X: ${params.value[0]}<br>Y: ${params.value[1]}<br>Z: ${params.value[2]}`;return content;},},grid3D: {boxWidth: 300,boxHeight: 140,boxDepth: 200,axisLine: {show: true,interval: 0,lineStyle: {color: '#2c3e50',},},// 控制灵敏度,数值越大越灵敏viewControl: {distance: 400,rotateSensitivity: 10, // 控制旋转的灵敏度zoomSensitivity: 10, // 控制缩放的灵敏度panSensitivity: 10, // 控制平移的灵敏度},},};const convertedDataList = this.dataList.map((series) =>series.map((point) => [point.x, point.y, point.z]));let series = [];// 设置颜色数组//#regionconst uniqueColorsSet = new Set();this.dataList.forEach((series) => {// 假设每个系列中的所有点都有相同的颜色,只取系列中第一个点的颜色if (series.length > 0) {uniqueColorsSet.add(series[0].color);}});const uniqueColorsArray = Array.from(uniqueColorsSet);//#endregion//#region 设置name数组const uniqueName = new Set();this.dataList.forEach((series) => {// 假设每个系列中的所有点都有相同的颜色,只取系列中第一个的Y轴if (series.length > 0) {uniqueName.add(series[0].y);}});const uniquNameArray = Array.from(uniqueName);//#endregionconvertedDataList.forEach((item, index) => {let series1 = {type: 'scatter3D',name: uniquNameArray[index],symbolSize: 3,itemStyle: {color: uniqueColorsArray[index],},label: {//当type为scatter3D时有label出现show: true,position: 'top', //标签的位置,也就是data中数据相对于线在哪个位置distance: 0,textStyle: {color: '#2c3e50',fontSize: 12,borderWidth: 0,borderColor: '#2c3e50',backgroundColor: 'transparent',},},data: item,};let series2 = {type: 'line3D', //当type为line3D时有label没有作用,官网没有label这个配置项name: uniquNameArray[index],smooth: true,lineStyle: {width: 5, //线的宽度color: uniqueColorsArray[index], //线的颜色},data: item, //线数据和点数据所需要的格式一样};series.push(series1, series2);});option.series = series;option && chart.setOption(option);window.addEventListener('resize', function () {chart.resize();});},},
};
</script><style scoped>
.div {background-color: #2c3e50;
}
#main {margin: 0 auto;border: 1px solid red;
}
</style>

四、效果

因为我的数据中就添加了三个数据,所以有三条折现,如果想要有更多折现,可以在数据中继续添加数据
请添加图片描述

相关文章:

01-echarts如何绘制三维折线图

echarts如何绘制三维折线图 一、相关依赖包1、下载依赖2、引入依赖 二、创建图表盒子1、创建盒子2、定义数据3、编写方法1、初始化盒子2、设置配置项3、修改数据格式4、设置颜色数组4、设置name数组5、设置线三维和点三维6、添加配置项7、设置图表自适应 4、调用方法 三、整体代…...

Linux-共享内存

文章目录 前言一、system V共享内存申请共享内存挂载共享内存删除共享内存挂载删除共享内存 二、示例代码三.运行效果 前言 在这之前我们已经学习了两种进程间通信方式&#xff1a;匿名管道和命名管道。 从我们之前的学习已经知道&#xff0c;想让多个进程间进行通信就需要让他…...

深入分析 Linux 网络丢包问题

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330 所谓丢包&#xff0c;是指在网络数据的收发过程中&#xff0c;由于种种原因&#xff0c;数据包还没传输到应用程序中&#xff0c;就被丢弃了。这些被丢弃包的数量&#…...

web安全学习笔记【08】——算法1

思维导图在最后 #知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&…...

2024最新版Python 3.12.1安装使用指南

2024最新版Python 3.12.1安装使用指南 Installation and Configuration Guide to the latest version Python 3.12.1 in 2024 By Jackson Python编程语言&#xff0c;已经成为全球最受欢迎的编程语言之一&#xff1b;它简单易学易用&#xff0c;以标准库和功能强大且广泛外挂…...

Oracle 经典练习题 50 题

文章目录 一 CreateTable二 练习题1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数2 查询"01"课程比"02"课程成绩低的学生的信息及课程分数3 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4 查询平均成绩小于…...

PyTorch的衍生资源

PyTorch作为深度学习领域的一个重要框架&#xff0c;自2016年首次发布以来经历了显著的发展。以下是PyTorch发展过程中的几个关键里程碑事件&#xff1a; 2016年&#xff1a; PyTorch于2016年首次发布&#xff0c;作为一个基于动态计算图的开源机器学习库&#xff0c;它提供了自…...

开源项目Git Commit规范与ChangeLog

一&#xff0c;conventional commit(约定式提交) Conventional Commits 是一种用于给提交信息增加人机可读含义的规范。它提供了一组用于创建清晰的提交历史的简单规则。 1.1 作用 自动化生成 CHANGELOG基于提交类型&#xff0c;自动决定语义化的版本变更向项目相关合作开发…...

【原理图PCB专题】OrCAD Capture CIS关闭开始界面

17.4版本 在打开OrCAD Capture CIS时会发现打开Start Page页面&#xff0c;那么如何将他关闭再也不看这个界面呢&#xff1f; 在窗口中输入SetOptionBool EnableStartPage 0 回车 重启软件后就再也不会弹出Start Page页面 如果没有发现Command Window那么将菜单栏view->C…...

【Linux】Ubuntu的gnome切换KDE Plasma

文章目录 安装KDE Plasma桌面环境添加软件源并更新apt安装kubuntu-desktop&#xff08;作者没有成功&#xff09;aptitude安装kubuntu-desktop多次aptitude install&#xff08;特别重要特别重要&#xff09;其他kde软件包 卸载gnome桌面 Ubuntu自带的桌面环境是gnome&#xff…...

Docker(九)Docker Buildx

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; Docker Buildx Docker Buildx 是一个 docker CLI 插件&#xff0c;其扩展了 docker 命令&#xff0c;支持 [Moby BuildKit] 提供的功能。提…...

Flink问题解决及性能调优-【Flink不同并行度引起sink2es报错问题】

最近需求&#xff0c;仅想提高sink2es的qps&#xff0c;所以仅调节了sink2es的并行度&#xff0c;但在调节不同算子并行度时遇到一些问题&#xff0c;找出问题的根本原因解决问题&#xff0c;并分析整理。 实例代码 --SET table.exec.state.ttl86400s; --24 hour,默认: 0 ms …...

瑞_数据结构与算法_二叉搜索树

文章目录 1 什么是二叉搜索树1.1 二叉搜索树的特征1.2 前驱后继 2 二叉搜索树的Java实现2.1 定义二叉搜索树节点类BSTNode泛型key改进 2.2 实现查找方法get(int key)递归实现非递归实现 ★非递归实现 泛型key版本 2.3 实现查找最小方法min()递归实现非递归实现 ★ 2.4 实现查找…...

Linux 命令行访问名字中包含空格的文件或文件夹

Linux 命令行访问名字中包含空格的文件或文件夹 References 在 Windows 下命名文件或文件夹名有空格是可以的&#xff0c;甚至在 Windows 和 Ubuntu 虚拟机共享的文件中也可以这么做&#xff0c;但是在 Ubuntu 中空格要用下划线代替&#xff0c;养成好习惯。Linux 会把空格当成…...

Dart/Flutter工具模块:the_utils

Flutter笔记 Dart/Flutter工具模块&#xff1a;the_utils 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/detail…...

矩阵号:日入100+,八大提示词(Prompt)使用技巧

最近在搞头条矩阵&#xff0c;发现自己的指令写的太烂了&#xff0c;一个指令将会决定你的写作质量。 收益比较拉垮&#xff0c;50个号收益好的&#xff0c;也就这么几个号。 于是我扒了一些提示词的操作技巧&#xff0c;分享一下自己的学习心得。 先说理论知识&#xff0c;实…...

爬虫工作量由小到大的思维转变---<第三十九章 Scrapy-redis 常用的那个RetryMiddleware>

前言: 为什么要讲这个RetryMiddleware呢?因为他很重要~ 至少在你装配代理ip或者一切关于重试的时候需要用到!----最关键的是:大部分的教学视频里面,没有提及这个!!!! 正文: 源代码分析 这个RetryMiddleware是来自: from scrapy.downloadermiddlewares.retry import Retry…...

【MongoDB】mongodb安装及启动踩坑点

mongodb的安装&#xff0c;基本上参考文章[1]。 但是在过程中&#xff0c;有一些踩坑点。 1&#xff0c;高版本mongodb不自带mongo脚本 在文章1中&#xff0c;作者在解压后&#xff0c;直接使用了mongo脚本&#xff0c;而我下载的mongodb版本要更高&#xff0c;在解压后&…...

动态规划——采矿的小奇【集训笔记】

题目描述 假期小奇去采矿场体验生活&#xff0c;工头为每个员工发放了一个最多能装 M 公斤的背包&#xff0c;经过一天的辛苦小奇开采出了 n 块矿石&#xff0c;它们的重量分别是W1&#xff0c;W2&#xff0c;...,Wn,经过预估它们的价值分别为C1,C2,...,Cn&#xff0c;那么请你…...

wpf控件Expander集合下的像素滚动

项目场景&#xff1a;Expander集合滚动 如下图&#xff0c;有一个Expander集合&#xff0c;且设置 ScrollViewer.VerticalScrollBarVisibility "Auto" 每个Expaner下包含有若干元素&#xff0c;当打开Expader(即IsExpanded "true"&#xff09;时&#…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...