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

基于MATLAB的风速风向风玫瑰图绘制方法与应用研究

基于matlab根据风速风向画风玫瑰图。

最近在分析气象数据的时候,总得处理风速风向这种CP组合。今儿给大伙儿整点实用的——用MATLAB画风玫瑰图。这玩意儿本质上就是个极坐标版的直方图,但配上彩色扇区确实比表格数据直观多了。

基于matlab根据风速风向画风玫瑰图。

先搞点模拟数据热热身。假设我们有个月的观测记录,每天24组数据:

direction = rand(720,1)*360; % 随机生成720个0-360度的风向 speed = 3 + randn(720,1)*2; % 风速均值3m/s的正态分布 speed(speed<0) = 0; % 风速不能为负

接下来是核心操作——数据分箱。风向要分成16个扇区(每个22.5度),风速分成五个等级:

theta_edges = linspace(0, 360, 17); % 16个风向区间边界 speed_edges = [0 2 5 8 12 20]; % 风速分级标准 % 双重分箱操作 [~, dir_bins] = histc(direction, theta_edges); [~, spd_bins] = histc(speed, speed_edges);

这里有个骚操作,用accumarray统计联合分布:

count_matrix = accumarray([dir_bins, spd_bins], 1, [16,5]); count_matrix(:,end) = []; % 剔除超出风速范围的数据 total = sum(count_matrix,2); frequency = count_matrix ./ total; % 各风速等级占比

重点来了,极坐标可视化部分。注意MATLAB原生的polarplot有点难用,咱们换个姿势玩:

figure('Color','w') ax = polaraxes(); theta = deg2rad(linspace(0, 360, 17)); % 转换成弧度 % 堆叠式柱状图 for k = 1:size(frequency,2) h = polarhistogram('BinEdges', theta, 'BinCounts', frequency(:,k)*100,... 'FaceColor', jet(5)(k,:), 'EdgeColor','none'); hold on end % 调教图形细节 ax.ThetaDir = 'clockwise'; % 风向顺时针增加 ax.ThetaZeroLocation = 'top'; % 0度指向正北 rlim([0 40]) % 半径范围 ax.RTickLabel = {'10%','20%','30%','40%'}; legend({'0-2m/s','2-5m/s','5-8m/s','8-12m/s','>12m/s'},'Location','southoutside')

运行完你会看到个五彩斑斓的玫瑰,不过可能遇到两个坑:一是颜色映射不匹配,这时候检查jet(5)是不是生成了五个颜色;二是图例位置可能跑偏,把Location参数改成'eastoutside'试试。

进阶玩法可以加个风速统计表:

uistack(ax,'bottom') % 把极坐标轴置底 annotation('textbox',[0.7 0.6 0.2 0.3],'String',... sprintf('最大风速: %.1fm/s\n平均风速: %.1fm/s',max(speed),mean(speed)),... 'EdgeColor','none','FontSize',10)

实测发现用histogram2也能快速出图,但自定义程度低:

histogram2(direction, speed, theta_edges, speed_edges,... 'DisplayStyle','tile','ShowEmptyBins','on') set(gca,'ThetaDir','clockwise','ThetaZeroLocation','top')

最后友情提示:处理真实数据时记得清洗异常值。曾经有个项目因为传感器故障导致出现3600m/s的风速,画出来的玫瑰图直接变成仙人掌,血泪教训啊...(完)

http://www.jsqmd.com/news/520070/

相关文章:

  • PowerPaint-V1 Gradio惊艳效果展示:自然语言驱动的语义级图像修复
  • 这10个免费网站,影视音乐工具全搞定,最后三个资源太实用了!
  • rust日常使用
  • Qwen3-VL-8B-Instruct-GGUF与MobaXterm结合:远程开发环境搭建
  • XLR8HardwareSerial:FPGA可重构UART的Arduino硬件抽象层
  • 别再踩坑了!在RK3588 U-Boot里修改DTB属性,为什么总提示FDT_ERR_NOSPACE?
  • 基于线性伽马分布回归模型的多变量时间序列预测及Matlab代码实现:推荐使用2018B及以上版本
  • 别再死记硬背了!用一张图+大白话搞懂BLE蓝牙协议栈(附GAP/GATT核心概念拆解)
  • 遵守交通规则下戴头盔的好处与坏处,个人对于带头盔的一些看法
  • 告别虚拟机!在MacOS上用VSCode和SDL2搭建LVGUI模拟开发环境全流程
  • 文墨共鸣大模型实战:基于卷积神经网络思想的文本特征可视化分析
  • I2Cdevlib-MPU6050驱动开发实战:STM32+FreeRTOS嵌入式IMU集成指南
  • Gemma-3-270m入门必学:140+语言识别能力与本地化提示词写法
  • 【开题答辩全过程】以 基于Java的一鸣企业人事管理系 统的设计与实现为例,包含答辩的问题和答案
  • 【基础分析】——线程、锁、条件变量
  • ArduinoHttpClient嵌入式HTTP通信实战指南
  • Qwen-Audio方言合成突破:地道粤语生成
  • BurstSPI:STM32F103RB高速SPI批量传输优化库
  • Realistic Vision V5.1 虚拟摄影棚提示词工程:从入门到精通的全攻略
  • 手把手教你“养龙虾”:OpenClaw从零部署到高阶应用全攻略
  • 通达信HSL_QD副图指标保姆级导入教程:手把手教你用换手率+量比双指标看盘
  • AI文档管理踩坑记:我们如何用Airflow调度,把Cursor产出自动归位到Confluence和TAPD
  • 从物理引擎到Material Design:深入理解Android插值器(Interpolator)的设计哲学
  • XLR8AddrPack:FPGA-ARM异构平台的硬件地址契约库
  • React 核心工作流程两阶段:Render 阶段和 Commit 阶段
  • C语言实现CAN FD高可靠通信:手把手教你绕过ISO 11898-1:2015标准陷阱的7个关键配置点
  • Python模块与包管理完全指南:从入门到精通
  • JDK 26 正式发布:十一大新特性深度解读
  • 2026年最新最全Java面试题汇总汇一览表!
  • GLM-OCR入门:3步完成CSDN星图GPU平台一键部署与测试