plotting lat, lon, altitude, variable

14 Ansichten (letzte 30 Tage)
Sagar
Sagar am 9 Mär. 2015
Kommentiert: Chad Greene am 16 Mär. 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.
-Sagar

Akzeptierte Antwort

Chad Greene
Chad Greene am 11 Mär. 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

Weitere Antworten (3)

Sagar
Sagar am 12 Mär. 2015
Bearbeitet: Sagar am 12 Mär. 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);
  4 Kommentare
Sagar
Sagar am 13 Mär. 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 am 14 Mär. 2015
Bearbeitet: Sagar am 14 Mär. 2015
Here is what I got with pcolor3, I am fully satisfied now. Thanks Chad.

Melden Sie sich an, um zu kommentieren.


Chad Greene
Chad Greene am 14 Mär. 2015
Great! You may also want to add a coast line for context as shown here.
  1 Kommentar
Sagar
Sagar am 15 Mär. 2015
Bearbeitet: Sagar am 15 Mär. 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)

Melden Sie sich an, um zu kommentieren.


Sagar
Sagar am 15 Mär. 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 Kommentar
Chad Greene
Chad Greene am 16 Mär. 2015
Or similarly,
in = ingeoquad(lat,long,[0 40],[-20 70]);
long(~in) = NaN;
lat(~in) = NaN;

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Climate Science and Analysis finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by