利用python绘制二维向量图

news2025/1/11 15:02:21

      为了实现地层数据的变化趋势的可视化模拟,最近研究了python环境下的可视化方案,为后续的流体运动的仿真模拟做好储备,主要采用matplotlib中的quiver函数,实现二维等值线数据的随深度或者地层数据的变化趋势绘制。

一、运行环境:python3.10环境,利用 matplotlib.pyplot、scipy.interpolate、numpy、pandas实现数据的处理,网格数据的生成,矩阵数据的合并等。

二、数据准备:数据处理和数据准备详见上一篇文章,数据格式和数据读取、数据处理方法类似。

三、二维向量图绘制

典型二维向量场箭头图的绘制

# 1.二维向量风场 典型示例
X = np.arange(-15, 15, 1)
Y = np.arange(-10, 10, 1)
U, V = vectorComputeUV0(X, Y)
font = {'family': 'serif',
        'weight': 'normal',
        'size': 10,
        }
C = np.cos(U)
## 1.1绘制风场风速
fig, ax1 = plt.subplots()
quiver1 = ax1.quiver(X, Y, U, V, C,  # X,Y,U,V 确定位置和对应的风速
                     width=0.003,  # 箭杆箭身宽度
                     scale=100,  # 箭杆长度,参数scale越小箭头越长
                     )
# 1.2绘制方向标识,画出风场、箭头箭轴后,需要说明:箭轴长度与风速的对应关系,详见下面quiverkey
# 风有U\V两个方向,调用quiverkey可以生成横向参考箭头 + label。
ax1.quiverkey(quiver1,  # 传入quiver句柄
              X=0.09, Y=0.051,  # 确定 label 所在位置,都限制在[0,1]之间
              U=5,  # 参考箭头长度 表示风速为5m/s。
              angle=0,  # 参考箭头摆放角度。默认为0,即水平摆放
              label='v:5m/s',  # 箭头的补充:label的内容  +
              labelpos='S',  # label在参考箭头的哪个方向; S表示南边
              color='b', labelcolor='b',  # 箭头颜色 + label的颜色
              fontproperties=font,  # label 的字体设置:大小,样式,weight
              )


# 风有U\V两个方向,调用quiverkey可以生成纵向参考箭头 + label
ax1.quiverkey(quiver1, X=0.07, Y=0.071,
              U=5,
              angle=90,  # 参考箭头摆放角度,90即垂直摆放
              label='w:5cm/s',  # label内容
              labelpos='N',  # label在参考箭头的北边
              color='r',  # 箭头颜色
              labelcolor='r',  # label颜色
              fontproperties=font)
plt.show()

效果图

利用实际地层数据绘制

# 数据准备详见第二部分内容。
xi = np.linspace(min(xs), max(xs))
yi = np.linspace(min(ys), max(ys))
xi, yi = np.meshgrid(xi, yi) # 网格化处理
# # 第一个参数:二维数组数据;第二个参数:要生成的维度数据实际散点值;第三个参数:要生成的目标点网格;第四个参数:生成方法;返回值:生成的全部网格对应的Z值数据
zi = griddata(data.iloc[:, 0:2], zs, (xi, yi), method='cubic')  #method : {'linear', 'nearest', 'cubic'}
xyz = np.c_[xi, yi, zi] #连接矩阵,行数不变,列数增加。
# 2.用实际盆模数据绘制,UV如何计算得到,详见vectorComputeUV2
# U,V=vectorComputeUV(xs,ys,zs)
threshold = 10  # 阈值,绝对值小于阈值的数据都不显示。
# U = vectorComputeUV3(zs,50)
# cs = plt.quiver(xs, ys, U,U)
U,V = vectorComputeUV2(xyz,threshold)
# cs = plt.quiver(xi, yi, U[:, 0:50], V[:, 0:50])
# cs = plt.quiver(xi, yi, U[:, 50:100], V[:, 50:100])
cs = plt.quiver(xi, yi, U[:, 100:150], V[:, 100:150])
plt.show()

效果图

计算UV方法如下,后续不断完善

# 计算矢量场的速度矢量
def vectorComputeUV0(X,Y):
    U, V = np.meshgrid(X, Y)
    return U,V
# 计算矢量场的速度矢量,xyz为矢量矩阵,threshold为阈值
def vectorComputeUV2(xyz,threshold):
    U, V = np.gradient(xyz) #计算变化趋势,梯度
    U=np.where(np.abs(U)<=threshold,0,U) #过滤阈值,U方向
    V = np.where(np.abs(V) <= threshold, 0, V)    #过滤阈值,V方向
    return U,V
# 计算矢量场的速度矢量,zi为输入的一维向量,threshold为阈值
def vectorComputeUV3(zi,threshold):
    U = np.gradient(zi,edge_order=1) #计算变化趋势,梯度
    U = np.where(np.abs(U) <= threshold, 0, U) #过滤阈值,U方向
    return U

quiver([X, Y], U, V, [C], **kw)参数说明

quiver([X, Y], U, V, [C], **kw)参数说明如下:
  X, Y 定义了箭头的位置.
    U, V 定义了箭头的方向.
    C 作为可选参数用来设置颜色.
   angles:可选参数,用于指定箭头和x轴之间的角度,以度为单位,默认为UV坐标系下的45度。
    scale:可选参数,指定箭头的大小,以矢量长度的一定系数来标识,默认为1.0。
    scale_units:可选参数,指定箭头大小的单位,可选值为x、y、xy,默认为xy。
    width:可选参数,用于指定箭头的宽度,默认为0.005。
    headwidth:可选参数,用于指定箭头的宽度,默认为3倍宽度。
    headlength:可选参数,用于指定箭头的长度,默认为4倍宽度。
    minshaft:可选参数,用于设定箭头最小长度的比例,这是一个实数,取值在0到1之间。

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

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

相关文章

MySQL--主从复制

目录 1.理解MySQL主从复制原理。 2.完成MySQL主从复制。 1.理解MySQL主从复制原理。 1.主要基于MySQL二进制日志 2.主要包括三个线程&#xff08;2个I/O线程&#xff0c;1个SQL线程&#xff09; 概括&#xff1a; 1、MySQL将数据变化记录到二进制日志中&#xff1b; 2、Slave…

【前端动画】点击移动放大出现蒙版,点击蒙版原路返回 css动画animation

<template><div><!-- 蒙版 Mask--><divv-if"isShowTableMask":class"${maskClass}"click"closeTableMask"></div><div style"" class"table-dialog" :class"${centerTableClass} …

Pytorch从入门到精通:二、dataset与datalodar

数据是深度学习的基础&#xff0c;一般来说&#xff0c;数据量越大&#xff0c;训练出来的模型也越强大。如果现在有了一些数据&#xff0c;该怎么把这些数据加到模型中呢&#xff1f;Pytorch中提供了dataset和dataloader&#xff0c;让我们一起来学习一下吧&#xff0c;datase…

AcWing 237. 程序自动分析

输入样例&#xff1a; 2 2 1 2 1 1 2 0 2 1 2 1 2 1 1输出样例&#xff1a; NO YES 解析&#xff1a; 并查集&#xff0c;由于 i, j 数据量为1e9&#xff0c;所以需要离散化。 数组要开2e5个&#xff0c;由于可能每条“约束条件”的数据都不一样。 #include<bits/stdc.h&…

Python-Go python模块与包 - GO问题 - GO容量测试

目录 go 模块与包复习&#xff08;Init函数 - go mod&#xff09; init函数有什么用&#xff1f;init函数是什么&#xff1f; go.mod文件是什么&#xff1f;有什么作用&#xff1f; python的模块与包 python中包的分类 1、内置模块&#xff1a;不需要安装&#xff0c;直接…

和chatgpt学架构04-路由开发

目录 1 什么是路由2 如何设置路由2.1 安装依赖2.2 创建路由文件2.3 创建首页2.4 编写HomePage2.5 更新路由配置2.6 让路由生效 3 测试总结 要想使用vue实现页面的灵活跳转&#xff0c;其中路由配置是必不可少的&#xff0c;我们在做开发的时候&#xff0c;先需要了解知识点&…

lwip-2.1.3自带的httpd网页服务器使用教程(四)POST类型表单的解析和文件上传

上一篇&#xff1a;lwip-2.1.3自带的httpd网页服务器使用教程&#xff08;三&#xff09;使用CGI获取URL参数&#xff08;GET类型表单&#xff09; 在阅读本篇内容之前&#xff0c;请修改httpd.c文件&#xff0c;修复lwip自带httpd服务器里面关于post的一个bug&#xff1a;bug…

系统集成|第一章(笔记)

目录 第一章 信息化知识1.1 信息与信息化1.1.1 信息1.1.2 信息系统1.1.3 信息化1.1.4 国家信息化体系要素 1.2 国家信息化战略和规划1.3 电子政务1.4 企业信息化和两化深度融合1.4.1 企业信息化1.4.2 企业应用集成1.4.2.1 电子商务系统1.4.2.2 企业资源规划系统1.4.2.3 客户关系…

【Java】 服务器cpu过高如何排查和解决?

文章目录 前言一、常见能够引起CPU100%异常的情况都有哪些&#xff1f;二、服务器CPU使用率飙升异常&#xff0c;黄金4步排查法三、排查 CPU 故障的常用命令四、什么场景会造成 CPU 低而负载确很高呢&#xff1f;五、监控发现线上机器内存占用率居高不下&#xff0c;如何分析进…

两个数组的dp问题--动态规划

一)最长公共子序列: 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 一)定义一个状态表示:根据经验题目要求 1)选取第一个字符串[0&#xff0c;i]区间以及第二个字符串[0&#xff0c;j]区间作为研究对象&#xff0c;先选取两段区间研究问题&#xff0c;先求出[0…

redis(8):java连接redis

1 Jedis所需要的jar包依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.1.0</version></dependency> 2 Jedis常用操作 2.1 测试连通性 package com.example.demo;import redis.…

手写Spring,理解SpringBean生命周期

按照Spring使用习惯&#xff0c;准备环境 ​ 首先&#xff0c;写一个TigerApplicationContext&#xff0c;模拟Spring的Annotation Application。然后写一个config&#xff0c;接着写一个UserService。 由于Spring需要扫描bean&#xff0c;所以我们得定义一个扫描注解Componen…

【C++】-priority_queue(优先级队列的具体使用和模拟实现)以及仿函数的简单介绍

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

ubuntu 开启 ssh 服务 设置root远程登录

设置root用户密码 sudo passwd root安装ssh服务和vim编辑器 sudo apt -y install openssh-server vim开启ssh服务 sudo vim /etc/ssh/ssh_config去掉 配置文件中 Port 22 的注释后保存退出 设置root用户远程登录 sudo vim /etc/ssh/sshd_config将 PermitRootLogin prohibit-pas…

文章审核之敏感词过滤

技术选型 DFA实现原理 DFA全称为&#xff1a;Deterministic Finite Automaton,即确定有穷自动机。 存储&#xff1a;一次性的把所有的敏感词存储到了多个map中&#xff0c;就是下图表示这种结构 敏感词&#xff1a;冰毒、大麻、大坏蛋 工具类 最下面的main方法是测试用的&a…

vuejs源码之解析器

解析就是将模版解析成AST。 <div id"app"><p>{{num}}</p> </div>比如下面这个代码&#xff0c;然后转成AST之后是这个样子。 它是用javascript对象来描述一个接待您&#xff0c;一个对象表示一个节点。对象中的属性用来保存节点所需的各种数…

Docker基本概念+命令

Docker基本概念命令 一、Docker是什么&#xff1f;二、为什么Docker技术受欢迎三、Docker核心概念四、Docker安装五、Docker镜像操作1.搜索镜像2.获取镜像3.镜像加速下载4.查看镜像信息5.查看下载的镜像文件信息6.查看下载到本地的所有镜像7.获取镜像的详细信息8.修改镜像标签9…

【复盘与分享】第十一届泰迪杯B题:产品订单的数据分析与需求预测

文章目录 题目第一问第二问2.1 数据预处理2.2 数据集分析2.2.1 训练集2.2.2 预测集 2.3 特征工程2.4 模型建立2.4.1 模型框架和评价指标2.4.2 模型建立2.4.3 误差分析和特征筛选2.4.4 新品模型 2.5 模型融合2.6 预测方法2.7 总结 结尾 距离比赛结束已经过去两个多月了。 整个过…

手机变局2023:一场瞄准产品和技术的“思维革命”

以折叠屏冲高端&#xff0c;已成为中国手机厂商们的共识。 在这个苹果未涉足的领域&#xff0c;国产手机厂商们加快脚步迭代推新&#xff0c;积极抢占机遇。但平心而论&#xff0c;虽然国产折叠屏机型众多&#xff0c;但市场上始终缺乏一款突破性的产品作为标杆&#xff0c;为…

前端监控一vue指令实现埋点

前端监控一vue指令实现埋点 https://v2.vuejs.org/v2/guide/custom-directive.html 自定义指令 需要在main.js中执行 import Vue from vue // 自定义埋点指令 Vue.directive(track, {//钩子函数&#xff0c;只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以…