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

vue2制作长方形容器,正方形网格散点图,并且等比缩放拖动

需求:有个长方形的容器,但是需要正方形的网格线,网格线是等比缩放的并且可以无线拖动的,并且添加自适应缩放和动态切换,工具是plotly.js,已完成功能如下

1.正方形网格

2.散点分组

3.自定义悬浮框的数据

4.根据窗口大小自适应缩放

5.解决数据过大或者过小网格线较少问题

6.解决项目引入plotly.js失败问题

1.效果

录像有点看不清,项目运行的话是正方形的

2.下载插件

2.1下载plotly.js

npm install plotly.js-dist-min

github的插件地址 ,里面有引入步骤

GitHub - plotly/plotly.js: Open-source JavaScript charting library behind Plotly and Dash 

plotly.js官网如下(全英文),里面有案例可以看

Plotly javascript graphing library in JavaScript

2.2下载linq.js

npm install linq

2.3 引入(解决引入报错)

通常都是第一种import的方式引入

// ES6 module
import Plotly from 'plotly.js-dist-min'// CommonJS
var Plotly = require('plotly.js-dist-min')

注意!!!如果引入后运行代码提示BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default. 可以看看这篇文章,完美解决Vue-解决BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default._breaking change: webpack < 5 used to include polyf-CSDN博客

3.代码详解

3.1 添加容器

   <div id="gd" ref="chart" style="width: 100%; height: 90vh"></div>

 3.2 模拟散点数据

{"points": [{"id": 1553,"project_id": 11,"name": "1504","x": -2.456,"y": 25440.3437,"z": -2.5487},{"id": 1554,"project_id": 11,"name": "1503","point_type": 2,"x": -1.7427000000000001,"y": 25440.4148,"z": -2.5736},{"id": 1555,"project_id": 11,"name": "1502","point_type": 1,"x": 0.5841,"y": 25440.6208,"z": -0.7072},]
}

3.3 画散点图

需要准备容器的id,data和layout还有配置项,有俩种写法,不做数据切换的时候可以用Plotly.newPlot,做数据切换的时候使用Plotly.react ,其他功能看看这个Function reference in JavaScript

    Plotly.react("gd",this.data,this.layout,this.options);

 3.4 配置data

配置项地址: 

Scatter traces in JavaScript

 通过linq根据数据源的point_type进行分组,一共分为4组散点数据图例分别为点组1234,

  1. x,y:点在图形的位置,格式为[1,2,3,4]
  2. text:点名称
  3. type: "scatter" 散点图
  4. marker:给散点根据组设置不同的样式,这个点目前没看到有自定义样式的选项,但是可供选择的样式有很多,可以根据官网进行配置

  5. name:图例的名称

  6. hovertemplate:鼠标滑到点上显示的悬浮框样式

  7. customdata:自定义数据,作用就是把z的数据添加到悬浮框中

      const groupedData = Enumerable.from(data).groupBy((point) => point.point_type).select((group) => {const xValues = group.select((point) => point.x).toArray();const yValues = group.select((point) => point.y).toArray();const zValues = group.select((point) => point.z).toArray();const textValues = group.select((point) => point.name).toArray();return {x: xValues,y: yValues,text: textValues,type: "scatter",mode: "markers",marker: {size: 12,sizemode: "diameter",symbol: (() => {switch (group.key()) {case 1:return "232";case 2:return "222";case 3:return "diamond";default:return "triangle-up";}})(),},name: (() => {switch (group.key()) {case 1:return "点组1";case 2:return "点组2";case 3:return "点组3";default:return "点组4";}})(),hovertemplate: `点名:%{text} <br> X: %{x}<br>Y: %{y}<br>Z:%{customdata}<br><extra></extra>`,customdata: zValues, //自定义数据};}).toArray();

3.5 配置layout(重点)

  正方形网格代码,必须设置

         scaleanchor: "y", // 将X轴的缩放锚定到Y轴

         scaleratio: 1, // 设置X轴和Y轴的比例为1:1

并且后续需要设置xaxis.dtick和yaxis.dtick的刻度间隔设置为一致,不然不是正方形

        xaxis: {dtick: null, // 设置X轴刻度间隔(不需要设置范围,只需要对齐yaxis的间隔设置一致就可以使图形是正方形并且等比缩放了)scaleanchor: "y", // 将X轴的缩放锚定到Y轴scaleratio: 1, // 设置X轴和Y轴的比例为1:1autorange: true,// range: [1, 5], // 初始X轴范围},

代码我写了备注,有些细节注意!!如果要做数据切换必须设置   uirevision: "true",  autorange: true

dragmode:“pan”,,配置项还有:"zoom" | "pan" | "select" | "lasso" | "drawclosedpath" | "drawopenpath" | "drawline" | "drawrect" | "drawcircle" | "orbit" | "turntable" | false

showlegend:显示图例

legend:调整图例的位置,不然默认是在右侧

      layout: {margin: { t: 0 }, //canvas对顶部的距离xaxis: {dtick: null, // 设置X轴刻度间隔(不需要设置范围,只需要对齐yaxis的间隔设置一致就可以使图形是正方形并且等比缩放了)scaleanchor: "y", // 将X轴的缩放锚定到Y轴scaleratio: 1, // 设置X轴和Y轴的比例为1:1autorange: true,// range: [1, 5], // 初始X轴范围},yaxis: {// dtick: 1000, // 设置Y轴刻度间隔dtick: null, // 设置X轴刻度间隔autorange: true,// range: [1, 100], // 初始Y轴范围},// dragmode: "zoom",dragmode: "pan", // 启用平移功能showlegend: true,uirevision: "true",legend: {x: 0.5, // 图例的x坐标y: 1, // 图例的y坐标xanchor: "center", // 图例水平居中yanchor: "bottom", // 图例底部对齐orientation: "h", // 图例横向排列},},

3.6 设置 

这段代码意思就是为了保证无论数据过大还是过小的情况下都能显示多个网格线,不会导致数据只会出现一条网格线,并且数据更新的时候都得重新设置

  this.layout.xaxis.autorange = true;

      this.layout.yaxis.autorange = true;

      this.layout.uirevision = maxY; uirevision必须和上一条数据不一致不然可能会导致数据更新失败

   calculateDtick(maxY, maxX, minY, minX) {// 计算绝对值const absX = Math.abs(maxX);const absY = Math.abs(maxY);// 取较大的绝对值const maxAbs = Math.max(absX, absY);const minAbs = Math.min(minY, minY);// 最大值减最小值除以 5(也就是默认分为5等分)let cz = Math.abs(maxAbs - minAbs);let result = cz / 5;// 将结果转换为整数,并且确保结果是 10 的倍数let roundedResult = Math.round(result / 10) * 10;console.log(roundedResult, "rounded result");// 确保 dtick 不为 0if (roundedResult < 1) {roundedResult = 1;}this.layout.xaxis.dtick = roundedResult;this.layout.yaxis.dtick = roundedResult;console.log(this.data,this.layout,this.options,this.layout.xaxis.dtick,"data数据");this.layout.xaxis.autorange = true;this.layout.yaxis.autorange = true;this.layout.uirevision = maxY;// newPlotPlotly.react("gd",this.data,this.layout,this.options// /* JSON object */ {//   data: ,//   layout: ,//   options: ,// });},

4.完整代码

<template><div style="width: 100%; height: 100%"><button @click="updateChart()">修改代码</button><button @click="updateChartOne()">修改代码22</button><div id="gd" ref="chart" style="width: 100%; height: 90vh"></div></div>
</template><script>
import Plotly from "plotly.js-dist-min";
import dataJson from "@/utils/data.json";
import Enumerable from "linq";
export default {data() {return {data: [],layout: {margin: { t: 0 }, //canvas对顶部的距离xaxis: {dtick: null, // 设置X轴刻度间隔(不需要设置范围,只需要对齐yaxis的间隔设置一致就可以使图形是正方形并且等比缩放了)scaleanchor: "y", // 将X轴的缩放锚定到Y轴scaleratio: 1, // 设置X轴和Y轴的比例为1:1autorange: true,// range: [1, 5], // 初始X轴范围},yaxis: {// dtick: 1000, // 设置Y轴刻度间隔dtick: null, // 设置X轴刻度间隔autorange: true,// range: [1, 100], // 初始Y轴范围},// dragmode: "zoom",dragmode: "pan", // 启用平移功能showlegend: true,uirevision: "true",legend: {x: 0.5, // 图例的x坐标y: 1, // 图例的y坐标xanchor: "center", // 图例水平居中yanchor: "bottom", // 图例底部对齐orientation: "h", // 图例横向排列},},options: {scrollZoom: true, //启用缩放功能displayModeBar: false, //不显示操作栏responsive: true, //制作响应式图表// tickmode: auto,// nticks: 10000,},};},mounted() {this.getData(dataJson.points, false);},methods: {updateChart() {this.getData([{id: 2711,project_id: 11,name: "aa222",x: 10,y: 22,z: 332,},],);},// 2126.474 1205.8596 1930.9592 850.2585updateChartOne() {this.getData([{id: 2711,project_id: 11,name: "aa222",point_type: 2,x: 2126.474,y: 1205.8596,z: 332,},{id: 2712,project_id: 11,name: "aa333",point_type: 1,x: 850.2585,y: 1930.9592,z: 1110,},{id: 2712,project_id: 11,name: "aa333",point_type: 1,x: 1000,y: 1000,z: 1110,},],);},// 模拟数据getData(data) {// this.layout.xaxis.range = [];// this.layout.yaxis.range = [];const groupedData = Enumerable.from(data).groupBy((point) => point.point_type).select((group) => {const xValues = group.select((point) => point.x).toArray();const yValues = group.select((point) => point.y).toArray();const zValues = group.select((point) => point.z).toArray();const textValues = group.select((point) => point.name).toArray();// 假设我们有一个函数可以根据 point_type 计算 z 值return {x: xValues,y: yValues,text: textValues,type: "scatter",mode: "markers",marker: {size: 12,sizemode: "diameter",symbol: (() => {switch (group.key()) {case 1:return "232";case 2:return "222";case 3:return "diamond";default:return "triangle-up";}})(),},name: (() => {switch (group.key()) {case 1:return "点组1";case 2:return "点组2";case 3:return "点组3";default:return "点组4";}})(),hovertemplate: `点名:%{text} <br> X: %{x}<br>Y: %{y}<br>Z:%{customdata}<br><extra></extra>`,customdata: zValues, //自定义数据};}).toArray();const maxY = Enumerable.from(data).max("$.y");const maxX = Enumerable.from(data).max("$.x");const minY = Enumerable.from(data).min("$.y");const minX = Enumerable.from(data).min("$.x");var len_str = (Math.ceil(maxY - minX) + "").length;let numStr = Math.pow(10, len_str - 1); // 初始化公共间最大间隔,console.log("最大 y 值:", maxY, maxX, minY, minX, numStr);// this.layout.xaxis.range = [1, maxX];// this.layout.yaxis.range = [1, maxY];this.data = groupedData;console.log(groupedData);this.calculateDtick(maxY, maxX, minY, minX);},calculateDtick(maxY, maxX, minY, minX) {// 计算绝对值const absX = Math.abs(maxX);const absY = Math.abs(maxY);// 取较大的绝对值const maxAbs = Math.max(absX, absY);const minAbs = Math.min(minY, minY);// 最大值减最小值除以 5(也就是默认分为5等分)let cz = Math.abs(maxAbs - minAbs);let result = cz / 5;// 将结果转换为整数,并且确保结果是 10 的倍数let roundedResult = Math.round(result / 10) * 10;console.log(roundedResult, "rounded result");// 确保 dtick 不为 0if (roundedResult < 1) {roundedResult = 1;}this.layout.xaxis.dtick = roundedResult;this.layout.yaxis.dtick = roundedResult;console.log(this.data,this.layout,this.options,this.layout.xaxis.dtick,"data数据");this.layout.xaxis.autorange = true;this.layout.yaxis.autorange = true;this.layout.uirevision = maxY;// newPlotPlotly.react("gd",this.data,this.layout,this.options// /* JSON object */ {//   data: ,//   layout: ,//   options: ,// });},},
};
</script><style lang="scss" scoped></style>

文章到此结束,希望对你有所帮助~

相关文章:

vue2制作长方形容器,正方形网格散点图,并且等比缩放拖动

需求&#xff1a;有个长方形的容器&#xff0c;但是需要正方形的网格线&#xff0c;网格线是等比缩放的并且可以无线拖动的&#xff0c;并且添加自适应缩放和动态切换&#xff0c;工具是plotly.js,已完成功能如下 1.正方形网格 2.散点分组 3.自定义悬浮框的数据 4.根据窗口大小…...

鸿蒙-页面和自定义组件生命周期

页面生命周期&#xff0c;即被Entry装饰的组件生命周期&#xff0c;提供以下生命周期接口&#xff1a; onPageShow&#xff1a;页面每次显示时触发一次&#xff0c;包括路由过程、应用进入前台等场景。onPageHide&#xff1a;页面每次隐藏时触发一次&#xff0c;包括路由过程、…...

AD域学习

AD域学习 AD域一、什么是AD域二、概念三、疑问四、内容4.1、AD域的功能 五、应用实践 AD域 一、什么是AD域 AD域&#xff08;Active Directory Domain&#xff09;是微软Windows网络中的一个概念&#xff0c;它是一种计算机网络的形式&#xff0c;其中所有用户账户、计算机、…...

leetcode 3066. 超过阈值的最少操作数 II 中等

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次操作中&#xff0c;你将执行&#xff1a; 选择 nums 中最小的两个整数 x 和 y 。将 x 和 y 从 nums 中删除。将 min(x, y) * 2 max(x, y) 添加到数组中的任意位置。 注意&#xff0c;只有当 nums 至少包含两个元…...

使用 WPF 和 C# 绘制覆盖网格的 3D 表面

此示例展示了如何使用 C# 代码和 XAML 绘制覆盖有网格的 3D 表面。示例使用 WPF 和 C# 将纹理应用于三角形展示了如何将纹理应用于三角形。此示例只是使用该技术将包含大网格的位图应用于表面。 在类级别&#xff0c;程序使用以下代码来定义将点的 X 和 Z 坐标映射到 0.0 - 1.…...

大数据学习(34)-mapreduce详解

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

源码编译安装httpd 2.4

方法一&#xff1a; 1、下载 Apache 源代码&#xff1a; wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar 2、解压源代码&#xff1a; tar -zxvf httpd-2.4.54.tar.gz 3、进入源代码目录&#xff1a; cd httpd-2.4.54 4、安装开发工具组&#xff1a; yum…...

1.15寒假作业

web&#xff1a;nss靶场ez_ez_php 打开环境&#xff0c;理解代码 使用个体传参的方法&#xff0c;首先代码会检查file参数的前三个字符是不是php&#xff0c;如果是就输出nice&#xff0c;然后用include函数包含file&#xff0c;绕过不是则输出hacker&#xff0c;如果没有file…...

Java中private和static同时使用会出现什么情况?

引言 这几天在学习单例设计模式&#xff08;后面会出一期包含23种设计模式介绍的博客&#xff09;的时候发现了一段代码 private static Single single; 当时我就在想&#xff0c;这个private和static一起用的话外界想要访问这个成员变量到底是能不能访问到呢&#xff1f;当…...

vue倒计时组件封装,根据每个循环项的倒计时是否结束添加新类名。

1.创建countdown.vue文件&#xff1a; <template><p style"font-size: 10px">{{time}}</p> </template> <script>export default{data () {return {time : ,flag : false}},mounted () {let time setInterval(() > {if (this.fla…...

nvim 打造成可用的IDE(2)

上一个 文章写的太长了&#xff0c; 后来再写东西 就一卡一卡的&#xff0c;所以新开一个。 主要是关于 bufferline的。 之前我的界面是这样的。 这个图标很不舒服有。 后来发现是在这里进行配置。 我也不知道&#xff0c;这个配置 我是从哪 抄过来的。 测试结果&#xff1…...

Spring Boot教程之五十五:Spring Boot Kafka 消费者示例

Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架&#xff0c;使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序&#xff0c;您可…...

目标检测跟踪中的Siamese孪生网络与普通卷积网络(VGG、ResNet)有什么区别?

1、什么是Siamese网络&#xff1f; Siamese网络又叫孪生网络&#xff0c;是一种特殊的神经网络架构&#xff0c;由一对&#xff08;或多对&#xff09;共享参数的子网络组成&#xff0c;用于学习输入样本之间的相似性或关系。最早在 1994 年由 Bromley 等人提出&#xff0c;最…...

AIGC时代 | 探索AI Agent的奥秘:四种设计模式引领未来智能趋势

AIGC时代 | 探索AI Agent的奥秘&#xff1a;四种设计模式引领未来智能趋势 引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI Agent作为新一代的智能代理&#xff0c;正在引领工作流程的革新。AI Agent&#xff0c;即人工智能代理&#xff0c;是一种…...

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统&#xff0c;其能识别的水果蔬菜有15种&#xff0c;# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...

【redis】redis-cli命令行工具的使用

redis-cli命令行工具是一个功能强大的Redis客户端&#xff0c;它允许用户与Redis数据库进行交互和管理。 以下是一些常用参数的使用说明&#xff1a; 基本连接参数 -h, --host <hostname>&#xff1a;指定要连接的Redis服务器的主机名或IP地址。如果未指定&#xff0c;…...

阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启

阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启 更新镜像源安装环境配置加速卸载安装pull拉取加速开机自启 更新镜像源 # dnf update&#xff1a;更新所有已安装的软件包。 sudo dnf update -y安装环境 # 安装环境 # yum-utils&#xff1a;提供了管理yum仓库的工具。…...

Grails应用http.server.requests指标数据采集问题排查及解决

问题 遇到的问题&#xff1a;同一个应用&#xff0c;Spring Boot(Java)和Grails(Groovy)混合编程&#xff0c;常规的Spring Controller&#xff0c;可通过Micromete Pushgateway&#xff0c; 采集到http.server.requests指标数据&#xff0c;注意下面的指标名称是点号&#…...

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …...

【vue3项目使用 animate动画效果】

vue3项目使用 animate动画效果 前言一、下载或安装npm 安装 二、引入组件三、复制使用四、完整使用演示总结 前言 提示&#xff1a;干货篇&#xff0c;不废话&#xff0c;点赞收藏&#xff0c;用到会后好找藕~ 点击这里&#xff0c;直接看官网哦 &#x1f449; 官网地址&#…...

C#中颜色的秘密

颜色的秘密: 颜色Color是一个调色板, 所有颜色都是由透明度Alpha,红Red,绿Green,蓝Blue按不同比例调色混合而成,如果不考虑透明度Alpha,颜色共有256*256*25616777216种 ColorARGB A,R,G,B都为byte型[8位],因此可以用整体的32个整数[Int32]来表示一种颜色 Color 所属命名空…...

Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…...

服务器一次性部署One API + ChatGPT-Next-Web

服务器一次性部署One API ChatGPT-Next-Web One API ChatGPT-Next-Web 介绍One APIChatGPT-Next-Web docker-compose 部署One API ChatGPT-Next-WebOpen API docker-compose 配置ChatGPT-Next-Web docker-compose 配置docker-compose 启动容器 后续配置 同步发布在个人笔记服…...

milvus过滤功能

数据格式: [{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682", "likes": 165},{"id": 1, "vecto…...

JavaScript系列(25)--性能优化技术详解

JavaScript性能优化技术详解 ⚡ 今天&#xff0c;让我们深入探讨JavaScript的性能优化技术。掌握这些技术对于构建高性能的JavaScript应用至关重要。 性能优化基础 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript性能优化涉及多个方面&#xff0c;包括代码执行效…...

基于vite+vue3+mapbox-gl从零搭建一个项目

下面是基于 Vite、Vue 3 和 Mapbox GL 从零搭建一个项目的完整步骤&#xff0c;包括环境搭建、依赖安装、配置和代码示例。 1. 初始化项目 首先&#xff0c;使用 Vite 快速创建一个 Vue 3 项目&#xff1a; npm create vuelatest vue3-mapboxgl --template vue cd vue3-mapbo…...

驱动开发系列33 - Linux Graphics mesa Intel驱动介绍

一:概述 mesa 中的 Intel 驱动体系是为支持 Intel GPU 提供图形 API 的硬件实现部分,主要包括 OpenGL、Vulkan等图形接口,Intel驱动实现整体上分为四层: 第一层:API 层, 实现 OpenGL 和 Vulkan 接口, src/mesa/main、src/vulkan。 第二层:驱动层,实现 OpenGL 和 Vulkan…...

【git】-3 github创建远程仓库,上传自己的项目,下载别人的项目

一、如何使用Github 1、创建远程仓库 2、使用github拉取/推送代码 克隆仓库 向远程仓库推送代码-git push 二、上传我们自己的项目到github 方法一&#xff1a;直接上传 方法二&#xff1a;使用git命令 方法三&#xff1a; 将仓库拉取到本地上传 三、下载别人的项目 …...

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录 1.多元素控件介绍 2.ListWidget控件 属性 核心方法 核心信号 细节 Demo&#xff1a;编辑日程 3.TableWidget控件 核心方法 QTableWidgetItem核心信号 QTableWidgetItem核心方法 细节 Demo&#xff1a;编辑学生信息 4.TreeWidget控件 核心方法 核心信号…...

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…...

Flink链接Kafka

一、基于 Flink 的 Kafka 消息生产者 Kafka 生产者的创建与配置&#xff1a; 代码通过 FlinkKafkaProducer 创建 Kafka 生产者&#xff0c;用于向 Kafka 主题发送消息。Flink 执行环境的配置&#xff1a; 配置了 Flink 的检查点机制&#xff0c;确保消息的可靠性&#xff0c;支…...

Maven 配置本地仓库

步骤 1&#xff1a;修改 Maven 的 settings.xml 文件 找到你的 Maven 配置文件 settings.xml。 Windows: C:\Users\<你的用户名>\.m2\settings.xmlLinux/macOS: ~/.m2/settings.xml 打开 settings.xml 文件&#xff0c;找到 <localRepository> 标签。如果没有该标…...

【PHP】双方接口通信校验服务

请求方 使用 ApiAuthService::buildUrl($domain, [terminal => 1, ts => time()]); //http://域名/adminapi/login/platformLogin?sign=F7FE8A150DEC18BE8A71C5059742C81A&terminal=1&ts=1736904841接收方 $getParams = $this->request->get();$validate…...

mac 安装docker

1、下载docker 进入 /Applications/Docker.app/Contents/MacOS/Docker Desktop.app/Contents/Resources目录 把app.asar 文件备份 将下载的中文包复制进去。修改成一样的名字 [汉化包下载地址](https://github.com/asxez/DockerDesktop-CN)...

ANSYS Fluent学习笔记(七)求解器四部分

16.亚松弛因子 Controls面板里面设置&#xff0c;它能够稳定计算的过程。如果采用常规的迭代算法可能结果就会发生振荡的情况。采用亚松驰因子可以有助于残差的稳定。 他的取值范围是0-1&#xff0c;0代表没有亚松驰&#xff0c;1表示物理量变化很快&#xff0c;一般情况下取…...

【微服务】面试 3、 服务监控 SkyWalking

微服务监控的原因 问题定位&#xff1a;在微服务架构中&#xff0c;客户端&#xff08;如 PC 端、APP 端、小程序等&#xff09;请求后台服务需经过网关再路由到各个微服务&#xff0c;服务间可能存在多链路调用。当某一微服务挂掉时&#xff0c;在复杂的调用链路中难以迅速确定…...

llamafactory使用8张昇腾910b算力卡lora微调训练qwen2-72b大模型

说明 我需要在昇腾服务器上对Qwen2-72B大模型进行lora微调&#xff0c;改变其自我认知。 我的环境下是8张910B1卡。显存约512GB。 准备&#xff1a;安装llamafactory 请参考官方方法安装llamafactory&#xff1a;https://github.com/hiyouga/LLaMA-Factory 特别强调下&…...

在服务器上增加新网段IP的路由配置

在服务器上增加新网段IP的路由配置 前提条件步骤一:检查当前路由表步骤二:添加新路由步骤三:验证新路由步骤四:持久化路由配置脚本示例结论在网络管理中,路由配置是一项基本且重要的任务。它决定了数据包在网络中的传输路径。本文将详细介绍如何在服务器上增加新的路由配置…...

2Spark Core

2Spark Core 1.RDD 详解1) 为什么要有 RDD?2) RDD 是什么?3) RDD 主要属性 2.RDD-API1) RDD 的创建方式2) RDD 的算子分类3) Transformation 转换算子4) Action 动作算子 3. RDD 的持久化/缓存4. RDD 容错机制 Checkpoint5. RDD 依赖关系1) 宽窄依赖2) 为什么要设计宽窄依赖 …...

【ANGULAR网站开发】初始环境搭建(SpringBoot)

1. 初始化SpringBoot 1.1 创建SpringBoot项目 清理spring-boot-starter-test&#xff0c;有需要的可以留着 1.2 application.properties 将application.properties改为yaml&#xff0c;个人习惯问题&#xff0c;顺便设置端口8888&#xff0c;和前端设置的一样 server:por…...

Vue 页面布局组件-Vuetify、Semantic

在现代 Web 开发中&#xff0c;用户体验是关键&#xff0c;尤其是当我们利用 Vue.js 框架构建用户友好的界面时。今天&#xff0c;我们将深入探讨如何使用 Vuetify 和 Semantic UI 来创建高效、美观的页面布局组件。通过这项技术&#xff0c;你将能够为用户呈现一个流畅的交互体…...

小程序组件 —— 31 事件系统 - 事件绑定和事件对象

小程序中绑定事件和网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过 on 的方式绑定事件&#xff0c;也没有 click 等事件&#xff0c;小程序中绑定事件使用 bind 方法&#xff0c;click 事件也需要使用 tap 事件来进行代替&#xff0c;绑定事件的方式有两种&…...

23种设计模式

23种设计模式 创建型模式&#xff08;Creational Patterns&#xff09;结构型模式&#xff08;Structural Patterns&#xff09;行为型模式&#xff08;Behavioral Patterns&#xff09;总结 Java中的设计模式是解决特定问题的通用、可复用的解决方案。它们不是完成代码&#x…...

SIBR详细介绍:基于图像的渲染系统及3DGS实例展示【3DGS实验复现】

文章目录 什么是 SIBR&#xff1f;IBR 技术的优势SIBR 的核心组件SIBR 的应用场景如何使用 SIBR&#xff1f;3D Gaussian Splatting 实验实例展示1. 什么是 3D Gaussian Splatting (3DGS)&#xff1f;2. 实验运行环境步骤&#xff1a;简要说明如何使用 3DGS 的两种渲染方式 3. …...

每天五分钟深度学习框架pytorch:基于vgg块搭建VGG卷积神经网络

本文重点 前面我们使用pytorch搭建了vgg块,本文我们使用vgg块搭建卷积神经网络VGG16,我们先来看一下vgg16的模型结构是什么样的: 搭建vgg16 import torch from torch import nn def vgg_block(num_convs,in_channels,out_channels): net=[nn.Conv2d(in_channels,out_channe…...

【gin】中间件使用之jwt身份认证和Cors跨域,go案例

Gin-3 中间件编程及 JWT 身份认证 1. Gin 中间件概述 中间件是处理 HTTP 请求的函数&#xff0c;可以在请求到达路由处理函数之前或之后对请求进行处理。 在 Gin 框架中&#xff0c;中间件常用于处理日志记录、身份验证、权限控制等功能。 router : gin.Default() router.Us…...

探索 Vue.js 组件开发的新边界:动态表单生成技术

随着前端技术的飞速发展&#xff0c;Vue.js 作为一款灵活、易用且性能优异的框架&#xff0c;一直是开发者心中的不二之选。本文将深入介绍 Vue.js 组件开发中的最新技术之一&#xff1a;动态表单生成技术&#xff0c;并通过具体实例展示如何实现这一高效技术。 为什么选择动态…...

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…...

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架&#xff0c;主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一&#xff0c;具有轻量级、灵活和功能丰富的特点。 核心概念包括路由&#xff0c;中间件&#xff0c;请求与响应&a…...

Picocli 命令行框架

官方文档 https://picocli.info/ 官方提供的快速入门教程 https://picocli.info/quick-guide.html 使用 Picocli 创建命令行应用程序 Picocli 是一个用于构建 Java 命令行应用的强大框架&#xff0c;它简化了参数解析和帮助消息生成的过程。 下面是如何使用 Picocli 构建简单命…...