2017-09-25 11 views
0

J'essaie de sous-créer un fichier .nc dans Matlab en utilisant ncread. Je cherche à sous-ensemble les données pour les longitudes -74.6875 à -10.3125 (W) et les latitudes 58.2500 à 84.7500 (N) pour créer une boîte englobante autour du Groenland. Je veux le sous-ensemble pour chaque jour de données. J'ai essayé le code suivant, qui travaille pour les indices de longitude et de latitude que j'ai besoin, mais produit une Flipped la version (à l'envers) du Groenland (voir ci-joint 1):Comment corriger le sous-ensemble ncread de la latitude et de la longitude dans Matlab?

data = ncread('dust_ddep.nc','dust_ddep',[457 297 1], [104 54 Inf], [1 1 1]); %576x360x366 lon, lat, time 

Lorsque je tente de tracer les données , J'ai besoin de le retourner pour m'assurer que la poussière d'Islande est située au bon endroit géographiquement (voir ci-joint). La latitude est tracée inversement (doit être de 55 à 85 N, pas l'inverse).

Ensuite, je conspire en utilisant la fonction m_coast pour produire la côte du Groenland (voir ci-joint, 2):

figure; 
data1 = data(:,:,160); %Grab one day of data 
imagesc(long1_sub,lat,data1) 
% m_pcolor(lon,lat,data(:,:,1)); %This comes up blank when I try to run m_pcolor 
shading flat; hold on; 
gland = m_coast('patch',[1 1 1],'edgecolor','k') 
% flipud(gland) %doesn't fix the upside down Greenland 
m_grid('box','fancy'); 

Qu'est-ce que je fais mal? Est-ce l'ordre de mon départ et compte? Ou, est-ce que c'est dans la façon dont je trace les imagesc? J'ai essayé aussi en utilisant pcolor (pas m_pcolor), mais je reçois une erreur en disant que les dimensions sont fausses (mais elles ne le sont pas ...). J'ai utilisé ce code avec pcolor: pcolor(long1_sub,lat,data1) Et reçois l'erreur:

Error using pcolor (line 59) 
Matrix dimensions must agree. 

Les dimensions de ces variables sont:

Long1_sub is [104x1] 
lat is [54x1] 
data1 is [104x54] 

Répondre

0

L'origine pour imagesc est le coin supérieur gauche au lieu du bas à gauche, qui par conséquent, "retourner" votre axe des y. Vous devez donc inverser l'axe des y pour le rendre normal.

imagesc(long1_sub,flipup(lat),data1) 

imagesc de très peu intuitif à cause de cela, donc je recommande d'utiliser pcolor. Quant à savoir pourquoi les erreurs de pcolor en utilisant les mêmes variables, la documentation pcolor dit que, "Si X et Y sont des vecteurs, X correspond aux colonnes de C et Y correspond aux lignes." Depuis data1 est 104x54, vous voulez transposer à 54x104 afin qu'elle est d'accord avec le LON/latitude,

pcolor(long1_sub,lat,data1') % Notice the ' next to data1 

J'espère que cela aide!

+0

J'ai trouvé que le problème avec imagesc était que j'avais besoin de retourner l'axe des ordonnées en utilisant le code suivant: 'set (gca,' ydir ',' normal ');' Et, la fonction pcolor fonctionne maintenant! Quelque chose d'apparemment simple a pris du temps à comprendre. Merci beaucoup! – user3052817