MATLAB Answers

plotting lat, lon, altitude, variable

187 views (last 30 days)
Sagar on 9 Mar 2015
Commented: Chad Greene on 16 Mar 2015
I have 3 vectors of latitude, longitude, and elevation respectively. I also have a corresponding 3d matrix of size latitude*longitude*elevation which contains some data (Temperature). I want to display the Temperature data in 3d space. What is the best way to do this? Note: I don't want to use trisurf because it requires reshaping the matrix into 3 separate vectors, with which I found difficulty in tracking the data points.
Many thanks.

Accepted Answer

Chad Greene
Chad Greene on 11 Mar 2015
You can try pcolor3, although it does not work for Matlab 2014b.
% Some data:
[lon,lat,z] = meshgrid(-180:3:180,-90:2:90,0:50:1000);
T = 20 - .1*abs(lat) - .01*z + sind(lon);
% Plot dataset:
% Add labels:
zlabel('elevation (m)')
title('temperature or something')
axis tight

More Answers (3)

Sagar on 12 Mar 2015
Edited: Sagar on 12 Mar 2015
Hi Chad, thanks a lot. I tried pcolor3 that you suggested, but with no success.
Please let me know if I did something wrong. I did:
pcolor3(X, Y, Z, permuted_ext_mean); % X, Y, Z and permuted_ext_mean all have 72*85*208 size.
I got following error in Matlab 2013b. Also, it would be great if you could put a colorbar in the output image. Error using interp3/stripnanwrapper (line 204) Insufficient finite values to interpolate.
The closest one I found for my purpose is isosurface, although I am not completely satisfied: surf2 = isosurface(X, Y, Z, permuted_ext_mean, isovalue);
Sagar on 14 Mar 2015
Here is what I got with pcolor3, I am fully satisfied now. Thanks Chad.

Sign in to comment.

Chad Greene
Chad Greene on 14 Mar 2015
Great! You may also want to add a coast line for context as shown here.
  1 Comment
Sagar on 15 Mar 2015
Hi Chad, that is a great suggestion and I am trying to do that as below. Is there a way to specify the range of latitude and longitude, say, in my case, 0 to 40N, -20 to 70E (so the length of the two vectors would be unequal). c = load('coast.mat'); plot(c.long, view (3)

Sign in to comment.

Sagar on 15 Mar 2015
Never mind! I was able to plot as I wanted with a small tweak. This is what I did:
load ('coast.mat');
long (long < -20 | long > 70 = NaN;
lat (lat < 0.00 | lat > 40.00) = NaN;
plot (lat, long);
  1 Comment
Chad Greene
Chad Greene on 16 Mar 2015
Or similarly,
in = ingeoquad(lat,long,[0 40],[-20 70]);
long(~in) = NaN;
lat(~in) = NaN;

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by