plotting lat, lon, altitude, variable

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.
-Sagar

 Réponse acceptée

Chad Greene
Chad Greene le 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:
pcolor3(lon,lat,z,T);
% Add labels:
xlabel('longitude')
ylabel('latitude')
zlabel('elevation (m)')
title('temperature or something')
axis tight

Plus de réponses (3)

Sagar
Sagar le 12 Mar 2015
Modifié(e) : Sagar le 12 Mar 2015

0 votes

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);

4 commentaires

Chad Greene
Chad Greene le 12 Mar 2015
Modifié(e) : Chad Greene le 12 Mar 2015
Interesting. I'm guessing your permuted_ext_mean variable has a lot of NaN values? Around line 74 of pcolor3 there's a slice line with the 'cubic' interpolation option chosen. There's a small chance that changing 'cubic' to 'linear' or 'nearest' will make it work. In the meantime I may tinker with an interpolationless solution.
Chad Greene
Chad Greene le 12 Mar 2015
I've just updated the function with a 'direct' option, which will plot your data directly instead of interpolating between points.
Sagar
Sagar le 13 Mar 2015
Yes, a lot of NaN values. Just tried the updated one, works well now. It is a bit slow though compared to isosurface, may be it is normal for pcolor.
-Sagar
Sagar
Sagar le 14 Mar 2015
Modifié(e) : Sagar le 14 Mar 2015
Here is what I got with pcolor3, I am fully satisfied now. Thanks Chad.

Connectez-vous pour commenter.

Chad Greene
Chad Greene le 14 Mar 2015

0 votes

Great! You may also want to add a coast line for context as shown here.

1 commentaire

Sagar
Sagar le 15 Mar 2015
Modifié(e) : Sagar le 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,c.lat) view (3)

Connectez-vous pour commenter.

Sagar
Sagar le 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 commentaire

Or similarly,
in = ingeoquad(lat,long,[0 40],[-20 70]);
long(~in) = NaN;
lat(~in) = NaN;

Connectez-vous pour commenter.

Catégories

En savoir plus sur Climate Science and Analysis dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by