在Matlab中合并两个图形 [英] Merging two figures in Matlab

查看:139
本文介绍了在Matlab中合并两个图形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我当前正在运行Matlab脚本(如下),该脚本会生成四个单独的图形.我想将这些图中的两个结合起来,以便同时显示它们.在下面的脚本中,我希望合并的图形分别称为图2和图4.

I am currently running a Matlab script (below) which produces four seperate graphs. I want to combine two of these graphs so that the are displayed simultaneously. The graphs I wish to combine i referred to as FIGURE 2 and FIGURE 4 in the below script.

该脚本的唯一输入是一个具有6列的txt文件:x坐标,y坐标和4个变量(深度[m],Hsig [m],周期[sec],方向[度])

The only input to the script is a txt file with 6 columns: x coordinates, y-coordinates and 4 variables (Depth [m], Hsig [m] , Period [sec] , Dir [degrees])

在此方面的任何帮助将不胜感激.

Any help on this would be greatly appreciated.

% Post-process a SWAN wave model output file
%----------------------------------------------------------------------------------------------
%defaults
N_header = 7; % header lines in SWAN file
N_vars = 6;           %output variables in SWAN file
x_origin = 0;    %real world x origin
y_origin = 0;   %real world y origin
quiver_subsample = 6; %sub-sampling factor to make direction plot clearer
rot_angle = 0; %rotation angle to correct any previous rotation for SWAN
island_mask = load('island_mask.txt'); %mask for islands (set land to NaN);

%specify input file
[filename,pathname] = ...
  uigetfile('*.txt', 'Specify SWAN results file (e.g. Scilly.txt) [*.txt]');
  SWANfile = fullfile(pathname,filename);

%read (and ignore) file header lines
fid = fopen(SWANfile);
for i=1:N_header
 head = fgets(fid);
end
%and now get the data
data = fscanf(fid,'%g %g',[N_vars inf]); data = data';
fclose(fid);

%extract the datasets we want, marking any junk values (e.g. dry land)
XP = data(:,1);
YP = data(:,2);

DEPTH = data(:,3);
dudsDEPTH = (DEPTH==-99);
DEPTH(dudsDEPTH) = NaN;

HS = data(:,4);
dudsHS = (HS==-9);
HS(dudsHS) = NaN;

PER = data(:,5);
dudsPER = (PER==-9);
PER(dudsPER) = NaN;

DIR = data(:,6);
dudsDIR = (DIR==-999);
DIR(dudsDIR) = NaN;

minX = min(XP);
minY = min(YP);
maxX = max(XP);
maxY = max(YP);
cellsize = XP(2) - XP(1);

% mesh and plot data onto scaled output grids
[xp,yp] = meshgrid(minX:cellsize:maxX,minY:cellsize:maxY);

sx = size(xp); xlen = sx(2); ylen = sx(1);
depth = reshape(DEPTH,xlen,ylen);
hs = reshape(HS,xlen,ylen);
per = reshape(PER,xlen,ylen);
dir = reshape(DIR,xlen,ylen);

depth_rot = flipud(rot90(depth,1));%pcolor(depth_rot);shading flat
hs_rot = flipud(rot90(hs,1));%pcolor(hs_rot);shading flat
per_rot = flipud(rot90(per,1));%pcolor(per_rot);shading flat
dir_rot = flipud(rot90(dir,1));
%remember that actual directions also need rotating (i.e. not just matrix!)
dir_rot = dir_rot + rot_angle; %pcolor(dir_rot);shading flat

xp_rot = xp;
yp_rot = yp;

%create x and y matrices in real world co-ordinates
xp_rot = xp_rot + x_origin;
yp_rot = yp_rot + y_origin;

%and equivalent x and y vectors, in case we need these instead
grid_cells = size(xp_rot);
x_cells = grid_cells(2); %columns
y_cells = grid_cells(1); %rows
x_utm = x_origin:cellsize:x_origin + (x_cells*cellsize);
y_utm = y_origin:cellsize:y_origin + (y_cells*cellsize); 
% y_utm = fliplr(y_utm); % flip to ensure cartesian rather than image axes


%create bathymetry plot
figure(1)
if ~isempty(island_mask)
 depth_rot_plot = depth_rot;
 depth_rot_plot(island_mask) = NaN;
 imagesc(x_utm,y_utm,depth_rot_plot)
 colormap(jet(256));
 map = colormap;
 map(1,:) = 1;
 % map(2,:) = 1;
 % map(3,:) = 1;
 colormap(map); 
else
 imagesc(x_utm,y_utm,depth_rot)
end
title('Bathymetry (m)', 'fontsize', 12)
set(gca,'fontsize', 12);
axis equal
axis tight
axis xy % need this to ensure cartesian rather than image axes!
colorbar

%create direction plot
figure(2)
[U,V] = pol2cart((dir_rot) ./ (180/pi),ones(size(dir_rot)));
% and sub-sample output grid to produce clearer plot
U_subsample = nestedsubsample2(U,quiver_subsample);
V_subsample = nestedsubsample2(V,quiver_subsample);
X_subsample = nestedsubsample2(xp,quiver_subsample);
Y_subsample = nestedsubsample2(yp,quiver_subsample);
quiver(X_subsample,Y_subsample,U_subsample,V_subsample,'k');
title('Direction')
axis equal
axis tight

%visualise wave breaking by taking ratio of Hs and depth
breaking = hs_rot ./ depth_rot;
breaking(breaking > 0.7) = 0.70;

%create Hb/depth plot to show where waves are shoaling and/or breaking
figure(3)
imagesc(x_utm,y_utm,breaking)
title('Hs / depth', 'fontsize', 12)
set(gca,'fontsize', 12);
axis equal
axis tight
axis xy % need this to ensure cartesian rather than image axes!
colorbar


%create Hs plot
figure(4)
imagesc(x_utm,y_utm,hs_rot)
title('Hs (m)', 'fontsize', 12)
set(gca,'fontsize', 12);
axis equal
axis tight
axis xy % need this to ensure cartesian rather than image axes!
colorbar


function [subsampled_A] = nestedsubsample2(A,I)
%NESTEDSUBSAMPLE2(A,I)
%resample 2D matrix A by retaining every Ith element

if I < 1
 I = 1;
end

A_dim = size(A);
new_i = 1:I:A_dim(1);
new_j = 1:I:A_dim(2);

subsampled_A = A(new_i,new_j);

end


end

推荐答案

如果您希望多个图形在同一图中的不同轴上显示 ,则可以使用

If you want multiple graphs to appear on separate axes in the same figure, you can use the SUBPLOT command. This will allow you to tile axes within a figure window.

如果您希望多个图形显示在同一轴 上,则可以使用

If you want multiple graphs to appear on the same axes, you can use the HOLD command.

这篇关于在Matlab中合并两个图形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆