02-echarts如何画轴心轨迹图

news2024/11/18 12:36:42

echarts如何画轴心轨迹图

  • 一、创建图表盒子
    • 1、创建盒子
    • 2、定义数据
      • 1、定义x,y点数据
      • 2、集合x,y点数据
      • 3、组件使用
        • 1、引入
        • 2、编写获取半径方法
        • 2、编写获取角度方法
        • 3、转换角度,半径数组
        • 3、初始化图表方法
        • 4、调用方法
  • 二、全部代码
    • 1、dataXY.js
    • 2、组件中代码
  • 三、效果图

一、创建图表盒子

1、创建盒子

<div
    id="PolarId"
    class="echart-container"
    style="width: 400px; height: 400px; margin: 0 auto; border: 1px solid red"
  ></div>

2、定义数据

1、定义x,y点数据

因为我数据比较多,所以我建立了一个x.js和y.js用来存放x点和y点的数据,因为我的数据有20多万条,所以我就写前几个,告诉一下你们格式是如何写的

// x.js文件
let x = [0.000000000000000000e+00,
-7.514304310856519740e-11,
-3.005721724342607896e-10·····]
export default x 
// y.js文件
let y = [  0.000000000000000000e+00,
  4.702124137616826465e-12,
  1.880849655046730586e-11,
  4.231911723855144707e-11,·····]
export default x 

2、集合x,y点数据

将x和y数据集合在一个数组里面,类似这样的格式,[[x,y],[x,y]····],因为x,y单个js数据太大了,所以我单个新建了一个dataXY.js文件来集合二者,集合完成以后将这个集合完成的数据抛出

import x from './x'
import y from './y.js'
let datalist = []
for (let i = 0; i < x.length; i++) {
  datalist.push([x[i], y[i]])
}

export default datalist

3、组件使用

1、引入
import datalist from './dataXY';
2、编写获取半径方法

传入x,y轴坐标,然后调用Math.sqrt方法,这个方法就是利用勾股定理
在这里插入图片描述

 getDistanceToOrigin(x, y) {
      return Math.sqrt(x ** 2 + y ** 2);
    },
2、编写获取角度方法
 // 获取角度
    getAngal(x, y) {
      var angle = Math.atan2(y, x);
      var degrees = angle * (180 / Math.PI); // 将弧度转换为角度
      return degrees;
    },
3、转换角度,半径数组

将获取到了x,y数组转换为[[半径,角度],[半径,角度]···]这样的数据格式

// 在data中定义arr
arr: [],
// 在mounted钩子函数中转换数据格式
datalist.forEach((item) => {
      let r = this.getDistanceToOrigin(item[0], item[1]);
      let a = this.getAngal(item[0], item[1]);
      this.arr.push([r, a]);
    });
3、初始化图表方法
 drawscatter(List) {
      // 初始化echarts
      echarts.dispose(document.getElementById('PolarId'));
      let PolarEcharts = echarts.init(document.getElementById('PolarId'));
      PolarEcharts.setOption({
        title: {
          // text: '轴心轨迹图',
          // left: '50%',
          // textAlign: 'center',
        },
        legend: {},
        gird: {
          width: '100%',
          height: '100%',
        },
        polar: {
          //极坐标
          radius: ['0%', '85%'], //=半径大小
        },
        tooltip: {
          show: true,
          trigger: 'axis',
          // formatter: function (params) {
          //   console.log(3333, params[0].data);
          //   let value = params[0].data;
          //   let angle = value[1] - 360;
          //   // if (angle < 0) {
          //   //   angle = 360 + angle; // 将负值角度转换为对应的正值
          //   // } else {
          //   //   angle = value[1];
          //   // }
          //   return `角度 : ${angle}<br/>幅度 : ${value[0]}`;
          // },
          axisPointer: {
            type: 'cross',
          },
        },
        angleAxis: {
          type: 'value',
          minInterval: 45,
          splitNumber: 10,
          clockwise: false,
          min: 0,
          max: 360,
          axisTick: {
            show: true,
          },
          axisLabel: {
            show: true,
            formatter: '{value}°',
          },
          axisLine: {
            show: true,
            lineStyle: {
              opacity: 1,
            },
          },
          // splitLine: {
          //   show: true,
          //   lineStyle: {
          //     opacity: 0.1,
          //   },
          // },
        },
        radiusAxis: {
          type: 'value',
          startAngle: 90,
          axisLine: {
            show: true,
          },
          splitLine: {
            show: true,
          },
          axisTick: {
            show: true,
          },
          axisLabel: {
            show: true,
            margin: 8,
            align: 'right',
            padding: [5, 0, 5, 0],
            verticalAlign: 'middle',
          },
        },
        series: [
          {
            coordinateSystem: 'polar',
            // name: 'Vibration',
            showSymbol: false,

            type: 'line',
            data: List,
          },
        ],
      });
      this.$nextTick(() => {
        PolarEcharts.resize();
      });
    },
4、调用方法

在mounted钩子函数中调用初始化图例的方法,然后传入角度,半径数组

   this.drawscatter(this.arr);

二、全部代码

因为x.js和y.js里面数据量太大,我就不展示了,我就直接贴其他两个文件

1、dataXY.js

import x from './x'
import y from './y.js'
let datalist = []
for (let i = 0; i < x.length; i++) {
  datalist.push([x[i], y[i]])
}

export default datalist

2、组件中代码

<template>
  <div
    id="PolarId"
    class="echart-container"
    style="width: 400px; height: 400px; margin: 0 auto; border: 1px solid red"
  ></div>
</template>
<script>
import datalist from './dataXY';
import * as echarts from 'echarts';
export default {
  data() {
    return {
      data3: [
        [20, 25],
        [19, 28.9],
        [18, 31],
        [16.75, 33.8],
        [15.73, 31],
        [15.999, 25],
        [17.46, 25],
        [18.56, 26.5],

        [19.36, 33.8],
        [18.8, 38],
        [17.54, 44],
        [16.24, 48],
        [14.46, 52],
        [12.12, 56],
        [9.93, 60],
        [8.53, 56],
        [8.13, 44],
        [9.22, 33],
        [11.02, 38],
        [11.92, 44],
        [12.86, 48],
        [12.96, 52],
        [13.3, 60],
        [13.3, -60],

        // [16.63, 40],
      ],

      arr: [],
    };
  },
  created() {},
  mounted() {
    datalist.forEach((item) => {
      let r = this.getDistanceToOrigin(item[0], item[1]);
      let a = this.getAngal(item[0], item[1]);
      this.arr.push([r, a]);
    });
    console.log('item', this.arr, this.data3);
    this.drawscatter(this.arr);
  },
  methods: {
    // 获取半径的
    getDistanceToOrigin(x, y) {
      return Math.sqrt(x ** 2 + y ** 2);
    },
    // 获取角度
    getAngal(x, y) {
      var angle = Math.atan2(y, x);
      var degrees = angle * (180 / Math.PI); // 将弧度转换为角度
      return degrees;
    },
    drawscatter(List) {
      // 初始化echarts
      echarts.dispose(document.getElementById('PolarId'));
      let PolarEcharts = echarts.init(document.getElementById('PolarId'));
      PolarEcharts.setOption({
        title: {
          // text: '轴心轨迹图',
          // left: '50%',
          // textAlign: 'center',
        },
        legend: {},
        gird: {
          width: '100%',
          height: '100%',
        },
        polar: {
          //极坐标
          radius: ['0%', '85%'], //=半径大小
        },
        tooltip: {
          show: true,
          trigger: 'axis',
          // formatter: function (params) {
          //   console.log(3333, params[0].data);
          //   let value = params[0].data;
          //   let angle = value[1] - 360;
          //   // if (angle < 0) {
          //   //   angle = 360 + angle; // 将负值角度转换为对应的正值
          //   // } else {
          //   //   angle = value[1];
          //   // }
          //   return `角度 : ${angle}<br/>幅度 : ${value[0]}`;
          // },
          axisPointer: {
            type: 'cross',
          },
        },
        angleAxis: {
          type: 'value',
          minInterval: 45,
          splitNumber: 10,
          clockwise: false,
          min: 0,
          max: 360,
          axisTick: {
            show: true,
          },
          axisLabel: {
            show: true,
            formatter: '{value}°',
          },
          axisLine: {
            show: true,
            lineStyle: {
              opacity: 1,
            },
          },
          // splitLine: {
          //   show: true,
          //   lineStyle: {
          //     opacity: 0.1,
          //   },
          // },
        },
        radiusAxis: {
          type: 'value',
          startAngle: 90,
          axisLine: {
            show: true,
          },
          splitLine: {
            show: true,
          },
          axisTick: {
            show: true,
          },
          axisLabel: {
            show: true,
            margin: 8,
            align: 'right',
            padding: [5, 0, 5, 0],
            verticalAlign: 'middle',
          },
        },
        series: [
          {
            coordinateSystem: 'polar',
            // name: 'Vibration',
            showSymbol: false,

            type: 'line',
            data: List,
          },
        ],
      });
      this.$nextTick(() => {
        PolarEcharts.resize();
      });
    },
  },
};
</script>
<style scoped>
.echarts {
  width: 100%;
  height: 100%;
  margin: 0 auto;
}
.echart-container {
  width: 1500px;
  height: 1500px;
  border: 1px solid red;
  margin: 0 auto;
}
</style>

三、效果图

在这里插入图片描述

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

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

相关文章

Qt 多次绘图

使用Qt 的时候发现&#xff1a; 背景&#xff1a;自己定义一个类&#xff0c;把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程&#xff09;问题&#xff1a;当鼠标在窗口内单击的时候会触发2次绘图。&#xff1f;难道不应该是一次吗&#xff1f; 于是开始了如下的测试…

SQL Server多数据表之间的数据查询和分组查询

文章目录 一、多数据表之间的数据查询1.1内连接查询&#xff08;Inner join&#xff09;1.2 左外连接 (LEFT JOIN):1.3右外连接 (RIGHT JOIN):1.4. 全外连接 (FULL OUTER JOIN):1.5 交叉连接 (CROSS JOIN):1.6 自连接 (SELF JOIN):1.7 子查询: 二、分组查询2.1 分组查询2.2 查询…

ai伪原创生成器app,一键生成原创文章

近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI伪原创生成器App已经成为了许多写手和创作者们的新宠。这款AI伪原创生成器App以其一键生成原创文章的快速便捷性&#xff0c;正在引起广泛的关注和使用。下面跟随小编一起来了解下吧&#xff01; 随着互联网的普及&…

两千字讲明白java中instanceof关键字的使用!

写在开头 在过往的内容中&#xff0c;我们讲了不少的Java关键字&#xff0c;比如final、static、this、super等等&#xff0c;Java中的关键字非常之多&#xff0c;下图是整理的关键字集合 而我们今天要学习的就是其中的instanceof关键字&#xff01; instanceof的定义 inst…

共享wifi项目到底能不能做?

如今&#xff0c;互联网已经渗透到我们生活的方方面面&#xff0c;人们对WiFi的需求越来越大&#xff0c;已经成为人们不可或缺的一部分。在这样的背景下&#xff0c;共享WiFi项目应运而生&#xff0c;作为近年来兴起的创业选择&#xff0c;成为了越来越多创业者追逐的热门项目…

5分钟做自己的微信红包封面

文章目录 怎么制作自己的红包封面&#xff1f;开通红包封面的要求如下&#xff1a;收费情况制作具体网站&#xff1a;https://chatapi.onechat.fun/register?affYoU6 提交审核logo封面、挂件、气泡证明材料 发放红包封面其他 怎么制作自己的红包封面&#xff1f; 开通红包封面…

秒级弹性!探索弹性调度与虚拟节点如何迅速响应瞬时算力需求?

作者&#xff1a;吴昆 前言 在前面的文章《弹性调度助力企业灵活应对业务变化&#xff0c;高效管理云上资源》中&#xff0c;我们介绍了阿里云容器服务 ACK 弹性调度为了帮助客户解决在使用云上弹性资源时&#xff0c;面对的“难以差异化控制业务资源使用量&#xff0c;缩容时…

C语言第七弹---循环语句

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 循环语句 1、while循环1.1、if和while的对比1.2、while语句的执行流程1.3、while循环的实践1.4、练习 2、for循环2.1、语法形式2.2、for循环的执行流程2.3、for循…

架构篇16:高性能NoSQL

文章目录 K-V 存储文档数据库列式数据库全文搜索引擎小结关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。 关系数据库存储的是行记录,无法…

使用Java编写RESTful Web服务

RESTful Web服务是一种基于HTTP协议的软件架构风格&#xff0c;它使用不同的HTTP方法&#xff08;如GET、POST、PUT、DELETE等&#xff09;来执行不同的操作&#xff0c;并使用统一的接口来访问和操作资源。在Java中&#xff0c;有多种框架可用于编写RESTful Web服务&#xff0…

Typecho后台无法登录显示503 service unavailable问题及处理

一、Typecho 我的博客地址&#xff1a;https://www.aomanhao.top 使用老薛主机动态Typecho博客框架handsome主题的搭配&#xff0c;文章内容可以异地网页更新&#xff0c;可以听后台背景音乐&#xff0c;很好的满足我的痛点需求&#xff0c;博客部署在云端服务器访问响应较快…

阿里云4核8G云服务器价格、带宽及系统盘费用

阿里云服务器4核8g配置云服务器u1价格是955.58元一年&#xff0c;4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格&#xff0c;规格不同性能不同&#xff0c;价格也不同&#xff0c;阿里云服务器网al…

Steam幻兽帕鲁搭建教程,如何选择服务器

如何选购服务器 大家可以根据自己的需求选购&#xff0c;大家最好选用物理服务器&#xff0c;可以找我参考一下。1到6人建议使用16H32G的20带宽的。12人以上建议大家使用E5的CPU内存64G的带宽50起步的。大家在选择服务器商的时候一定要选择正规的拥有资质的&#xff0c;这样售…

RabbitMQ系列之交换机的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《RabbitMQ系列之交换机的使用》。&#x1f3af;&…

ntp时间适配服务器和ssh免密登录

1&#xff0e;配置ntp时间服务器&#xff0c;确保客户端主机能和服务主机同步时间 服务端server向阿里时间服务器进行时间同步 第一步&#xff1a;定位服务端server #安装软件 [rootserver ~]# yum install chrony -y # 编辑配置文件&#xff0c;定位第3行&#xff0c;修改…

Win10添加网络打印机后无法打印的解决方法

在Win10电脑中&#xff0c;用户成功添加了网络打印机&#xff0c;却遇到了无法打印的问题&#xff0c;导致用户不能顺利完成打印任务。以下小编分享三种简单的方法&#xff0c;帮助大家轻松解决Win10网络打印机已添加但无法打印的问题&#xff0c;解决后用户就能通过网络打印机…

【AI大模型】WikiChat超越GPT-4:在模拟对话中事实准确率提升55%终极秘密

WikiChat&#xff0c;这个名字仿佛蕴含了无尽的智慧和奥秘。它不仅是一个基于人工智能和自然语言处理技术的聊天机器人&#xff0c;更是一个能够与用户进行深度交流的智能伙伴。它的五个突出特点&#xff1a;高度准确、减少幻觉、对话性强、适应性强和高效性能&#xff0c;使得…

pnpm 源不对 Will retry in 10 seconds. 2 retries left.

现象 由于使用npm config set registry 切换淘宝源时&#xff0c;把地址打错了。 后面使用pnpm install 时出现 此时无论我怎么使用npm config set registry 或者pnpm config set registry 切回正确的源均没有效果。 解决 在其他用npm的项目运行一下npm i 再运行pnpm i 即…

生产问题(十四)K8S抢占CPU导致数据库链接池打爆

一、引言 线上一天出现了两次数据库连接失败的大量报错&#xff0c;一开始以为是数据库的问题&#xff0c;但是想了想如果是数据库的问题&#xff0c;应该会有大量的应用问题 具体分析之后&#xff0c;发现其实是容器cpu出现了Throttled&#xff0c;导致大量线程阻塞 二、分析 …

UDS Flash刷写流程介绍

一、刷写流程介绍 1.1刷写包含以下三个步骤&#xff1a;预编程&#xff0c;编程&#xff0c;后编程 1.2预编程步骤 此步骤是保证能够正常进入编程&#xff08;10 02&#xff09;会话下。 &#xff08;1&#xff09;如果无特殊要求&#xff0c;只保证刷写能够正常进行&#x…