✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
基于MATLAB读取空间分布点的时程数据并绘制云图的动态视频
⛄ 完整代码
% 读取空间分布点的时程数据,并绘制云图的动态视频
clear all;close all;
%==================
% % 加载数据
% % 风压时程数据Pressure_history.mat,其中变量只有Pressure_history
% % Pressure_history第1-2列表示所有节点的[x,y]坐标
% % Pressure_history第3列开始,每一列表示所有节点的某个时刻的时程数据,本例表示风压时程
% load('Pressure_history.mat'); % 是一个Np*(2+Nt)的矩阵,Np表示节点数目,Nt表示时程数目
%==================
% 为了避免无法运行,此处生成随机的风压时程数据
xmin=0;xmax=4;ymin=0;ymax=1; % 定义云图绘制范围
xl=linspace(xmin,xmax,41)';
yl=linspace(ymin,ymax,31)';
[X,Y]=meshgrid(xl,yl);
x=reshape(X,[],1);y=reshape(Y,[],1);Np=length(x); % 得到节点坐标
Nt=20; % 定义时程数据长度
Pt=rand(Np,Nt); % 生成随机风压时程数据
Pressure_history=[x,y,Pt]; % 将坐标和时程数据组合
%===================
% 制作动图
tic; % 开始计时
for i=1:Nt % 自己根据需要选定哪些时刻进行绘制
set(gcf,'outerposition',get(0,'screensize')); % 窗口最大化,看情况是否需要
%===================
% 方法1:根据散点插值;适用于任意散点
data=[Pressure_history(:,1:2),Pressure_history(:,i+2)]; % 某个时刻的所有节点数据 [x,y,Pt_i]
[X,Y,Z_u]=griddata(data(:,1),data(:,2),data(:,3),linspace(xmin,xmax,31)',linspace(ymin,ymax,21),'v4');
%===================
% % 方法2:由已有节点直接reshape生成网格节点;适用于规则节点情况
% x0=Pressure_history(:,1);y0=Pressure_history(:,2);z0=Pressure_history(:,i+2);
% X=reshape(x0,length(yl),length(xl));
% Y=reshape(y0,length(yl),length(xl));
% Z_u=reshape(z0,length(yl),length(xl));
%===================
[C,h]=contourf(X,Y,Z_u,20,'w-');shading flat;
set(colorbar('SouthOutside'));caxis([0 1]); % 定义bar的刻度范围
set(gca,'FontName','Times New Roman','FontSize',12); % 定义字体、字号
set(gca, 'PlotBoxAspectRatio',[(xmax-xmin)/(ymax-ymin) 1 1],'XLim',[xmin xmax],...
'YLim',[ymin ymax],'ZLim',[0 1]); % 定义云图范围及比例
ab=15;xlabel('{\itx}/m','FontName','Times New Roman','fontsize',ab);
ylabel('{\ity}/m','FontName','Times New Roman','fontsize',ab);
set(gca,'xtick',[xmin:0.5:xmax],'ytick',[ymin:0.2:ymax]); % x,y轴刻度
title(strcat('第',num2str(i,'%03d'),'秒'),'FontName','Times New Roman','fontsize',ab); % 标题
M(i)=getframe(gcf); % 保存当前图片窗口
end;
timeelapse=roundn(toc,-1);% 结束计时,保留一位小数点
fprintf(strcat('耗时=',num2str(timeelapse),'秒\n')); % 在屏幕中输出耗时
movie2avi(M, 'my.avi', 'compression', 'None','FPS',2);
%==========================================================================
⛄ 运行结果
⛄ 参考文献
[1]刘峰, 刘娟, 李萍,等. 基于MATLAB实现3种气象数据的读取和绘图[J]. 广东气象, 2007, 29(4):3.