Plotting variable from NetCDF file
30 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
BN
am 5 Nov. 2019
Kommentiert: Jess Lovering
am 5 Nov. 2019
Hello all,
I'm Student and work on my project but unfortunately, I faced a problem. I limit latitude and longitude of NetCDF using find<= but some part of it has been offside, I mean Some pixels are outside of the country. See the below figure: (the red line is country borders, and you'll see some pixel are outside)
I want to use inpolygon function in order to mask the country of interest. I want to eliminate all outside the country data and achive something like this picture below:
So I used this code below:
filename = 'tmin.1982.nc'
time = ncread(filename,'time'); %read time
lat = ncread(filename,'lat'); %reading latitude
lon = ncread(filename,'lon'); %reading longitude
tmin = ncread(filename,'tmin'); %reading the main variable precip=(lon*lat*time)
tmin_mean = mean(tmin, 3); %average of precip in all times
[x, y] = borders('Iran Islamic Republic of'); % study region
[lonG, latG] = ndgrid(lon, lat); %you might have to reverse these
in = inpolygon(lonG, latG, x, y);
inmask = repmat(in, 1, 1, size(tmin,3));
masked_tmin = tmin;
masked_tmin(~inmask) = nan;
mean_masked_tmin = mean(masked_tmin, 3, 'omitnan');
but after plot it using this code:
%plot
surf(lon, lat, mean_masked_tmin(:,:,:).'); view(2)
axis xy
%shading interp
cmocean 'rain' % rainy to dry colormap %from Climate data toolbox (Chad A. Greene)
xlabel longitude
ylabel latitude
hold on
borders('countries','color',rgb('dark gray'))
cmocean 'rain'
cb = colorbar;
cb.Label.String = 'Average Temperature';
xlabel longitude
ylabel latitude
I saw that it's far away from where it should be. I mean it must be in a yellow-highlighted region but it is far away (see figure below):
I don't know what the problem is.
I haven't any experience with this problem. here is size and other information that i'm screenshot them:
0 Kommentare
Akzeptierte Antwort
Jess Lovering
am 5 Nov. 2019
Bearbeitet: Jess Lovering
am 5 Nov. 2019
I noticed there is a comment note on this line about reversing the arrays:
[lonG, latG] = ndgrid(lon, lat); %you might have to reverse these
I think you may need to flip your lat and lon arrays before you grid them. You may want to try flipud. It's a little tough from the picture if that is the issue - but you may want to try this as a first step:
[lonG, latG] = ndgrid(flipud(lon), flipud(lat)); %you might have to reverse these
Also, maybe try switching the lat and lon - the picture almost look like these are reversed (maybe mixed up in the netcdf file?). So try:
[lonG, latG] = ndgrid(lat, lon); %you might have to reverse these
2 Kommentare
Jess Lovering
am 5 Nov. 2019
Sorry those didn't work. Maybe you can try to meshgrid the variables instead of ndgrid?
[lonG, latG] = meshgrid(lon, lat);
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu NetCDF 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!