plotting lat, lon, altitude, variable

조회 수: 14 (최근 30일)
Sagar
Sagar 2015년 3월 9일
댓글: Chad Greene 2015년 3월 16일
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

채택된 답변

Chad Greene
Chad Greene 2015년 3월 11일
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

추가 답변 (3개)

Sagar
Sagar 2015년 3월 12일
편집: Sagar 2015년 3월 12일
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
Sagar
Sagar 2015년 3월 13일
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 2015년 3월 14일
편집: Sagar 2015년 3월 14일
Here is what I got with pcolor3, I am fully satisfied now. Thanks Chad.

댓글을 달려면 로그인하십시오.


Chad Greene
Chad Greene 2015년 3월 14일
Great! You may also want to add a coast line for context as shown here.
  댓글 수: 1
Sagar
Sagar 2015년 3월 15일
편집: Sagar 2015년 3월 15일
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)

댓글을 달려면 로그인하십시오.


Sagar
Sagar 2015년 3월 15일
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
Chad Greene
Chad Greene 2015년 3월 16일
Or similarly,
in = ingeoquad(lat,long,[0 40],[-20 70]);
long(~in) = NaN;
lat(~in) = NaN;

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Legend에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by