Combining Map with Surface Plot

29 views (last 30 days)
I just acquired the Mapping Toolbox so that I could add maps to some figures I have made using Matlab.
Here is my working code to generate a crude (no titles or other extras for simplicity) 4 panel plot of my data
figure; set(subplot(2,2,1),'Position', [0.05, 0.55, 0.45, 0.4]); surf(Uwin,'EdgeColor','none');
set(gca, 'FontSize', 17); hold on;
set(subplot(2,2,2),'Position', [0.55, 0.55, 0.45, 0.4]); surf(Vwin,'EdgeColor','none');
set(gca, 'FontSize', 17); hold on;
set(subplot(2,2,3),'Position', [0.05, 0.05, 0.45, 0.4]); surf(Usum,'EdgeColor','none');
set(gca, 'FontSize', 17); hold on;
set(subplot(2,2,4),'Position', [0.55, 0.05, 0.45, 0.4]); surf(Vsum,'EdgeColor','none');
set(gca, 'FontSize', 17); hold off;
Here is working code to generate a 4-panel plot of the map I need
figure; set(subplot(2,2,1),'Position', [0.04, 0.56, 0.45, 0.5]); hold on;
coast=load('coast');
axesm('eqdcylin','origin',[0 180 0],'MapLatLimit',[0 90]); gridm on;
geoshow(coast.lat,coast.long, 'Color', 'black');
tightmap;
set(subplot(2,2,2),'Position', [0.54, 0.56, 0.45, 0.5]);
coast=load('coast');
axesm('eqdcylin','origin',[0 180 0],'MapLatLimit',[0 90]); gridm on;
geoshow(coast.lat,coast.long, 'Color', 'black'); tightmap;
set(subplot(2,2,3),'Position', [0.04, 0.07, 0.45, 0.5]);
coast=load('coast');
axesm('eqdcylin','origin',[0 180 0],'MapLatLimit',[0 90]); gridm on;
geoshow(coast.lat,coast.long, 'Color', 'black'); tightmap;
set(subplot(2,2,4),'Position', [0.54, 0.07, 0.45, 0.5]);
coast=load('coast');
axesm('eqdcylin','origin',[0 180 0],'MapLatLimit',[0 90]); gridm on;
geoshow(coast.lat,coast.long, 'Color', 'black'); tightmap; hold off;
What is the best way to get MATLAB to overlay my data over my map using MATLAB 2015a, while preserving the subplot (4-panel) structure?
Thank you very much, Evan Kutta

Accepted Answer

Kelly Kearney
Kelly Kearney on 21 Aug 2015
All the map plotting functions plot to the current axis, regardless of whether it's a subplot or not. So to plot to specific ones, either make sure your desired subplot is the current axis, or pass (... 'parent', mysubax) as properties.
Do you have coordinates to go along with your plotted arrays, or are you just assuming they fill the full global space? I'm assuming the latter in this example. Also, I cleaned up some of the unnecessary code (the limits and origin you specified are the defaults, and subplot is unnecessary when you're passing specific axes coordinates).
[Uwin, Vwin, Usum, Vsum] = deal(rand(50,100)); % placeholders for your data
lt = linspace(-90, 90, size(Uwin,1));
ln = linspace(-180, 180, size(Uwin,2));
data = {Uwin, Vwin, Usum, Vsum};
pos = [...
0.04, 0.56, 0.45, 0.5
0.54, 0.56, 0.45, 0.5
0.04, 0.07, 0.45, 0.5
0.54, 0.07, 0.45, 0.5];
for ii = 1:4
ax(ii) = axes('position', pos(ii,:));
axesm('eqdcylin');
gridm on;
surfm(lt, ln, data{ii});
geoshow(coast, 'color', 'k');
tightmap;
end
  1 Comment
Evan Kutta
Evan Kutta on 21 Aug 2015
Thank you very much, fixed my problem and helped me write cleaner code!

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!