利用python绘制二维向量图

news/2025/1/16 0:58:24/

      为了实现地层数据的变化趋势的可视化模拟,最近研究了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.ppmy.cn/news/973606.html

相关文章

通过宝塔面板将vue项目放到阿里云服务器(两个vue项目)

前提条件&#xff1a; 端口提前开放所需环境安装好&#xff08;Nginx node…&#xff09;以及打包好的vue文件&#xff08;dist&#xff09; 第一步&#xff1a;上传文件到自定义目录 第二步&#xff1a;在首页找到Nginx软件并配置 第三步&#xff1a;配置具体的配置 这里说…

Attention详解(自用)

encoder-decoder 分心模型&#xff1a;没有引入注意力的模型在输入句子比较短的时候问题不大&#xff0c;但是如果输入句子比较长&#xff0c;此时所有语义完全通过一个中间语义向量来表示&#xff0c;单词自身的信息已经消失&#xff0c;可想而知会丢失很多细节信息&#xff0…

Godot 4 源码分析 - 增加管道通信

学习研究Godot 4&#xff0c;很爽&#xff0c;虽然很庞杂&#xff0c;但相对于自己的水平来说&#xff0c;很强大&#xff0c;尤其是vulkan这块直接打包可用&#xff0c;省得自己从头琢磨。 一点一点地消化、优化与完善&#xff0c;最终才能成为自己的。 这段时间就在Godot的…

cocos2D插件转3D插件

cocos2D插件转3D插件 use strict;/*** 3d插件api映射,兼容2d插件* */let fs require("fs");let path require("path");let baseDir ;const prsPath (Editor.Project && Editor.Project.path ? Editor.Project.path : Editor.remote.projectP…

linux初学者要读的书

1、《Linux程序设计&#xff08;第4版&#xff09;》 2、《鸟哥的Linux私房菜 》 3、《UNIX环境高级编程》 4、《Unix/Linux编程实践教程》 5、《深入理解 Linux 内核》 6、《 Linux命令行与shell脚本编程大全&#xff08;第3版&#xff09;》 7、《Linux内核设计与实现&…

测试了Copilot辅助编程后,就离不开这个AI工具了

微软用chatGPT 4 对github copilot X升级后&#xff0c;本是怀着赠热点的心态测试了一下其功能。但 Copilot 智能化程度之高&#xff0c;令我吃惊&#xff0c;两周下来已离开不这个工具了。 下面简单分享一下其使用过程&#xff0c;以及对如何使用好这个工具的个人看法. 1. 安…

AI | 浅谈AI技术以及其今后发展

文章概要 近期AI成为热点话题&#xff0c; GPT&#xff0c; new bing&#xff0c; bard&#xff0c;AI 绘画等 AI 编程工具引发大量讨论。请结合自身学习与工作经历&#xff0c;一起来聊聊你对AI技术以及其今后发展的看法吧。 &#x1f31f;&#x1f31f;&#x1f31f;个人简介…

对Al技术以及其今后发展的看法

近期AI成为热点话题&#xff0c; ChatGPT&#xff0c; GPT4&#xff0c; new bing&#xff0c; Bard&#xff0c;AI 绘画&#xff0c; AI 编程工具引发大量讨论。请结合自身学习经历&#xff0c;一起来聊聊你对 AI 技术以及其今后发展的看法吧。 内容创作方向参考&#xff08;…