【五一创作】Matlab 绘制风速、风向统计玫瑰花图【优化】

news2024/12/23 5:15:45

在之前,有个博客专门讲matlab 绘制风速、风向统计玫瑰花图;这里面存在不少细节问题,目前对该部分代码做了优化。以前的博客链接见下:
Matlab 绘制风速、风向统计玫瑰花图

最近接了一个任务,需要绘制风速、风向的统计玫瑰花图。
图中的风向表示风的来向。
在这里用到一些工具包,如tight_subplot,wind_rose,WindRose。颜色的colorbar:sunshine_9lev。
在这张图中用到的是WindRose工具包。

首先优化的是风速的分段,以前分的太粗糙了,修正后则会美观很多。
见下:
修正前:

修正后:

代码示例:

% 清除工作空间并添加路径
clear
path(path,'.\wind_rose');
path(path,'.\WindRose');
path(path,'E:\new_matlab_Tool\tight_subplot');
path(path,'E:\new_matlab_Tool\export_fig3.25\export_fig-master');

% 设置图形大小并创建图形对象
fig_size = 800;
figure('color','w','position',[50, 50, fig_size*1.414,fig_size]);

% 使用 tight_subplot 函数创建 2x2 的子图对象,并返回子图对象数组 ax 和位置信息 pos
[ha, pos] = tight_subplot(2,2,[.035 .035],[.05 .05],[.05 .1]);

% 绘制第一个子图
ii = 1;
ax(ii) = subplot(2,2,1,'Position',pos{ii,1});
plot_data(ii)

% 绘制第二个子图
ii = 2;
ax(ii) = subplot(2,2,2,'Position',pos{ii,1});
plot_data(ii)

% 绘制第三个子图
ii = 3;
ax(ii) = subplot(2,2,3,'Position',pos{ii,1});
plot_data(ii)

% 绘制第四个子图
ii = 4;
ax(ii) = subplot(2,2,4,'Position',pos{ii,1});
plot_data(ii)

% 保存图形为 PNG 格式文件
export_fig( gcf, '-png', '-r600', ['wind_rose','.png']);

% 定义绘制数据的函数 plot_data
function plot_data(ii)

% 加载颜色条数据
sunshine_9lev = load('E:\new_matlab_Tool\colorbar_NCL\colorbar\sunshine_9lev.txt');

% 定义经纬度范围
minlon = 113; maxlon = 129;  minlat = 4; maxlat = 14;
lon = [minlon:0.25:maxlon];
lat = [minlat:0.25:maxlat];
[lon lat] = meshgrid(lon,lat);
[mm nn] = size(lon);

% 加载风速数据
load('../u10/u_season_mean.mat');
load('../v10/v_season_mean.mat');

if ii ==1
    uu = u10_map2_s1_mean;
    vv = v10_map2_s1_mean;
elseif ii == 2
    uu = u10_map2_s2_mean;
    vv = v10_map2_s2_mean;
elseif ii == 3
    uu = u10_map2_s3_mean;
    vv = v10_map2_s3_mean;
else
    uu = u10_map2_s4_mean;
    vv = v10_map2_s4_mean;
end

% 计算风速和风向
N=1; xx=lon(:,:,N); yy=lat(:,:,N); 
[mm nn jj] = size(uu);
V2=sqrt(uu.^2+vv.^2);%计算速度
V2 = reshape(V2,[mm*nn*jj 1]);
uu = reshape(uu,[mm*nn*jj 1]);
vv = reshape(vv,[mm*nn*jj 1]);
for kk = 1:mm*nn*jj
    DD(kk,1) = fun_wind(uu(kk,1),vv(kk,1));
end

% 设置风玫瑰图参数
Options = {'anglenorth',0,...
    'angleeast',90,...
    'labels',{'N (0^o)','NE (45^o)','E (90^o)','SE (135^o)','S (180^o)','SW (225^o)','W (270^o)','NW (315^o)'},...
    'freqlabelangle',-22.5,...
    'MaxFrequency',40,... % 最大频率
    'nFreq',5,...
    'vWinds',[0:1:10],...
    'LabLegend','Wind Speed (m/s)',...
    'legendtype',0,...
    'scalefactor',0.8,...
    'titlestring',' ',...
    'cMap',sunshine_9lev
    };

% 调用 WindRose 函数绘制风玫瑰图
WindRose(DD,V2,[Options,{'axes',gca}]);

% 添加子图标题和颜色条
if ii ==1
    title('Spring','FontName','Times New Roman','FontWeight','bold','Fontsize',16,'color','m');
elseif ii == 2
    title('Summer','FontName','Times New Roman','FontWeight','bold','Fontsize',16,'color','m');
elseif ii == 3
    title('Autumn','FontName','Times New Roman','FontWeight','bold','Fontsize',16,'color','m');
else
    title('Winter','FontName','Times New Roman','FontWeight','bold','Fontsize',16,'color','m');
end
colormap(sunshine_9lev);
caxis([0 10])
if ii == 4
    cl = colorbar('location','east','position',[0.9 0.06 0.01 0.88]);
    ylabel(cl,'Wind speed [m/s]','FontName','Times New Roman','FontWeight','bold','Fontsize',14);
end

end

% 定义计算风向的函数 fun_wind
function fx = fun_wind(u,v)  % 外面吹向地区中心的方向[风的来向]
ct=atand(v/u);
if u>0&&v>0 
   fx=270-ct;
elseif u<0&&v>0
   fx=90-ct;
elseif u<0&&v<0
   fx=90-ct;
elseif u>0&&v<0
   fx=270-ct;
elseif u==0&&v>0
   fx=180;
elseif u==0&&v<0
   fx=0;
elseif u>0&&v==0
   fx=270;
elseif u<0&&v==0
   fx=90;
end

end

代码解释:
这段代码是用 MATLAB 编写的,用于生成一个包含四个风玫瑰图的图形,并保存为 PNG 格式文件。以下是代码的主要功能:

1、清除工作空间并添加路径。这些语句用于清除工作空间中的变量,并将包含需要使用的函数和工具的路径添加到 MATLAB 的搜索路径中。

clear
path(path,'.\wind_rose');
path(path,'.\WindRose');
path(path,'E:\new_matlab_Tool\tight_subplot');
path(path,'E:\new_matlab_Tool\export_fig3.25\export_fig-master');

2、设置图形大小并创建图形对象。这些语句用于创建一个图形对象,并设置其大小和背景颜色。

fig_size = 800;
figure('color','w','position',[50, 50, fig_size*1.414,fig_size]);

3、使用 tight_subplot 函数创建 2x2 的子图对象。这些语句使用 tight_subplot 函数创建一个 2x2 的子图对象数组 ax,并返回每个子图在图形中的位置信息 pos。

[ha, pos] = tight_subplot(2,2,[.035 .035],[.05 .05],[.05 .1]);

4、绘制四个子图。这些语句用于在每个子图位置上绘制风玫瑰图,其中 plot_data 函数用于绘制每个子图上的数据。

ii = 1;
ax(ii) = subplot(2,2,1,'Position',pos{ii,1});
plot_data(ii)

ii = 2;
ax(ii) = subplot(2,2,2,'Position',pos{ii,1});
plot_data(ii)

ii = 3;
ax(ii) = subplot(2,2,3,'Position',pos{ii,1});
plot_data(ii)

ii = 4;
ax(ii) = subplot(2,2,4,'Position',pos{ii,1});
plot_data(ii)

5、保存图形为 PNG 格式文件。这条语句用于将图形保存为 PNG 格式文件。

export_fig( gcf, '-png', '-r600', ['wind_rose','.png']);

6、定义绘制数据的函数 plot_data。这个函数用于绘制每个子图上的数据,包括加载数据、计算风速和风向、设置风玫瑰图参数、调用 WindRose 函数绘制风玫瑰图、添加子图标题和颜色条等操作。

function plot_data(ii)
...
end

7、定义计算风向的函数 fun_wind。这个函数用于根据风速分量 u 和 v 计算风向。

function fx = fun_wind(u,v)
...
end

**备注:**定义风速风向的函数可以继续优化;可以选用matlab内置函数

Dir=mod(atan2d(uu1,vv1),360);

根据uv求流向,正北为0°

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

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

相关文章

Java 基础进阶篇(五)—— 抽象类与模板方法设计模式

文章目录 一、抽象类、抽象方法概述二、抽象类的特征三、模板方法设计模式3.1使用场景3.2 实现步骤3.3 写作文案例 补充&#xff1a;final 和 abstract 是什么关系? 一、抽象类、抽象方法概述 在 Java 中 abstract 是抽象的意思&#xff0c;可以修饰类、成员方法。 abstract …

Java 基础进阶篇(七)—— 面向对象三大特征之三:多态

文章目录 一、多态的概述二、多态中成员访问特点 ★三、多态的优势与劣势四、多态下的类型转换4.2 自动类型转换&#xff08;从子到父&#xff09;4.2 强制类型转换&#xff08;从父到子&#xff09;4.3 instanceof 关键字 一、多态的概述 多态&#xff1a;是指执行同一个行为…

Java 基础进阶篇(四)—— 权限修饰符、final 关键字与枚举

文章目录 一、权限修饰符二、final 关键字2.1 final 作用2.2 final 修饰变量举例2.3 常量 三、枚举3.1 枚举的格式3.2 枚举的特征3.3 枚举的应用 一、权限修饰符 权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符&#xff1a; 有四种作用范围由小到大 (p…

Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后&#xff1a;成员变量和方法的访问特点五、继承后&#xff1a;方法重写六、继承后&#xff1a;子类构造器的特点七、继承后&#xff1a;子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…

机器学习之利用SMO算法求解支持向量机—基于python

大家好&#xff0c;我是带我去滑雪&#xff01; 本期将讨论支持向量机的实现问题&#xff0c;我们知道支持向量机的学习问题可以化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解&#xff0c;并且有许多最优化算法可以用于这一问题的求解。但是当训练样本容量很大…

【C++】 探索程序 详细解读程序在运行过程中都发生了什么

目录 头文件-源代码 头文件重复包含 问题 解决方案 程序生成过程 预处理Preprocessi 编译Compilation 汇编Assembly 链接Linking 编译期-运行期 编译期确定 运行期确定 编译期错误 运行期错误 类和对象 宏 宏的其他用法 inline内联 头文件-源代码 头文件&…

Vue简介和常用指令

概述&#xff1a; MVVM思想&#xff1a;视图层数据和数据模型里面的数据发生变化都会影响到另一边的数据&#xff0c;通过ViewModel自动实现。 Vue入门案例 步骤&#xff1a; 上面提到了数据模型和试图层的数据是关联的&#xff0c;此处数据模型里面el的值就是选择了哪一个视…

jQuery引入----练习

jQuery引入----练习 html <!DOCTYPE html> <html><head><title>jQuery引入</title><!-- css样式引入 --><link rel"stylesheet" href"../css/a.css"><!-- jquery函数库引入 --><script type"tex…

Linux基础IO【深入理解文件系统】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、磁盘文件2、磁盘概念2.1、基本结构2.2、数据存储 3、磁盘信息3.1、分区意义…

【C++初阶】类与对象:6大默认成员函数------拷贝构造和赋值运算符重载

一.拷贝构造函数 A.概念 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。 B.特性 1. 拷贝构造函数是构造函数的一个重载形式&#xff1b; 2. 拷贝构造函…

shell的基础学习二

文章目录 一、Shell 数组二、Shell 基本运算符三、Shell echo命令四、Shell printf 命令五、Shell test 命令总结 一、Shell 数组 数组中可以存放多个值。Bash Shell 只支持一维数组&#xff08;不支持多维数组&#xff09;&#xff0c;初始化时不需要定义数组大小&#xff08…

【五一创作】【Simulink】基于FCS-MPC的三相并网逆变器控制(Stateflow)

上次写了一篇【Simulink】基于FCS-MPC的三相并网逆变器控制&#xff08;Matlab Function&#xff09;&#xff0c;控制部分用 Matlab Function 写的&#xff0c;因实验室一般用 Stateflow&#xff0c;所以这篇把 Matlab Function 改成 Stateflow. 原理 电路原理图&#xff1a;…

如何批量查询快递的签收状态?

如果一次性网购大量快递&#xff0c;我们就得经常进入快递或网购平台查询物流&#xff0c;随时查看快递单号的物流状态。如果快递公司少&#xff0c;查询起来比较容易&#xff0c;但是如果快递公司很多&#xff0c;每次都要人工查询就是一件很麻烦的事情了。今天&#xff0c;小…

数据库相关知识

一.1 数据库 与Sybase不同&#xff0c;一个用户就对应于一个数据库。 create user CBMAIN identified by "sunline" default tablespace CBMAIN_DATA  -- 表空间 temporary tablespace CBMAIN_TEMP; -- 临时表空间 一.2 表空间 表空间由一个或多个物理文件组成&…

js使用splice方法删除数组元素可能导致的问题

splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组&#xff0c;并以数组形式返回被修改的内容。此方法会改变原数组。 JavaScript 遍历数组并通过 splice 方法删除该数组符合某些条件的元素将会导致哪些问题&#xff1f; 导致的问题 当使用 splice 方法从 …

QT 中的多线程之继承 Thread

文章目录 1. 概述2. UML 类的关系图3. 代码&#xff1a;4. 运行结果及说明5. 结语 1. 概述 任何继承于QThread的线程都是通过继承 QThread 的run函数来实现多线程的&#xff0c;因此&#xff0c;必须重写QThread的run函数&#xff0c;把复杂逻辑写在QThread的run函数中。然后在…

effective c++ item40-44

item40:谨慎的使用多重继承 多重继承带来的符号的歧义性 #include <iostream> #include <vector> using namespace std; class A { public:void f() { cout << "A" << endl; } }; class B { private:void f(); }; class C : public A, publ…

5.5.1哈夫曼树

知识总览&#xff1a; 概念&#xff1a; 结点的权&#xff1a;有某种现实含义的数值&#xff08;如&#xff1a;表示结点的重要性&#xff09; 结点的带权路径长度&#xff1a;从树的根到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积。 就比如说要…

ETL工具 - Kettle 案例,拉取网络列表数据

一、Kettle 实战案例 上篇文章对 Kettle 的查询、连接、统计、脚本算子进行了介绍&#xff0c;对 Kettle 的大部分算子都应该有了相应的了解&#xff0c;下面我们基于 Kettle 实战案例&#xff0c;拉取 CSDN 博客列表的全部数据&#xff0c;存放至 Excel 文件中。 实验之前先…

NECCS|全国大学生英语竞赛C类|词汇和语法|词汇题|21:03~21:53

词汇题 语法题 情景对话题 目录 一、词汇题 1. 基本词义辨析题 2. 同义词或近义词辨析题 3. 固定搭配 二、常见词组 一、词汇题 1. 基本词义辨析题 appropriate funds 拨款 slum- clearance programme 贫民窟清理计划 reject 拒绝接受&…