source: trunk/src/hovmullerlonorlat.m @ 327

Last change on this file since 327 was 327, checked in by pinsard, 13 years ago

change svn properties

  • Property svn:keywords set to URL
File size: 7.0 KB
Line 
1function [hovdata] = hovmullerlonorlat(data,dim1,dim2,dim3,numdimtomean,centralvalue,extmeandim, nomvar)
2
3%hovmullerlonorlat permet de realiser un diagramme de hovmuller a partir
4%d'une matrice 3D (temps, longitudes, latitudes). Celui-ci peut-etre
5%latitudes vs temps ou temps vs longitudes.
6
7%
8%+
9%
10% ====================
11% hovmullerlonorlat.m
12% ====================
13%
14% .. function:: hovmullerlonorlat(data,dim1,dim2,dim3,numdimtomean,centralvalue,extmeandim,nomvar)
15%
16% DESCRIPTION
17% ===========
18%
19% - Donnees d'entrees :
20%
21%   * data : Matrice de donnees 3D (temps, longitudes, latitudes).
22%   * dim1 : Variable de la dimension 1 de la matrice 'data', c'est-a-dire
23%     le temps.
24%   * dim2 : Variable de la dimension 2 de la matrice 'data', c'est-a-dire
25%     les longitudes.
26%   * dim3 : Variable de la dimension 3 de la matrice 'data', c'est-a-dire
27%     les latitudes.
28%   * numdimtomean : Numero de la dimension spatial sur laquelle il faudra
29%     moyenner. (Ex : Pour un diagramme latitudes vs temps, il faut
30%     moyenner sur les longitudes soit la dimension 2).
31%   * centralvalue : Valeur centrale du moyennage sur la dimension
32%     correspondante (en degrees + si N/E ou - si S/W).
33%   * extmeandim : Etendue du moyennage autour de la valeur centrale (en
34%     degrees).
35%   * nomvar (caracteres) : Nom et unite de la donnee etudiee ici
36%     (Ex : 'cumuls EPSAT (mm)').
37%
38% - Donnees de sorties :
39%
40%   * hovdata : Matrice 2D comportant les donnees du diagramme de
41%     hovmuller. La premiere dimension est le temps et la dimension
42%     spatiale du diagramme.
43%
44% Cette fonction permet d'analyser les donnees MSG et de concatener les
45% intensites resultantes en sortie. L'analyse s'effectue sur une seule
46% saison, sur tous les fichiers ou entre deux dates predefinies.
47%
48% EXAMPLES
49% ========
50%
51% Voir la 'demo'.
52%
53% SEE ALSO
54% ========
55%
56% TODO
57% ====
58%
59% use datetick
60%
61% check if demo latitude correct
62%
63% EVOLUTIONS
64% ==========
65%
66% $Id$
67%
68% $URL$
69%
70% - fplod 20110804T123916Z aedon.locean-ipsl.upmc.fr (Darwin)
71%
72%   * add demo latitude
73%
74% - jaclod 2011-07-27
75%
76%   * Revision de la documentation et des commentaires.
77%   * Remplacement des arguments d'entrees 'minmeandim' et 'maxmeandim' par
78%     'centralvalue' et 'extmeandim' et modification des titres.
79%
80% - jaclod 2011-07-21
81%
82%   * Modification de l'affichage des donnees temporelles sur l'axe
83%     correspondant.
84%   * Ajour de la documentation et des commentaires.
85%
86% - jaclod 2011-07-20
87%
88%   * Creation.
89%
90%-
91
92if nargin~=8;
93    error('Tous les arguments n''ont pas ete donnes.')
94end
95
96if size(size(data),2) ~= 3;
97    error('Les donnees doivent etre dans une matrice a 3 dimensions.')
98end
99
100if numdimtomean ~= 2 && numdimtomean ~= 3;
101    error('Le moyennage ne se fait que sur l''une des dimensions spatiales de la matrice de donnees (temps, longitudes, latitudes).');
102end
103
104
105%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
106% Creation des bornes sur la dimension moyenne
107%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
108
109minmeandim = centralvalue - extmeandim/2;
110maxmeandim = centralvalue + extmeandim/2;
111
112%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
113
114
115%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
116% Extraction des donnees concernes
117%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
118
119% On cherche les indices entre lesquelles il faut prendre les donnees. On
120% extrait ensuite les donnees correspondantes.
121if numdimtomean == 2;
122   
123    %%%%% Recherche des indices %%%%%
124    indicemin = find(dim2 >= minmeandim,1,'first');
125    indicemax = find(dim2 <= maxmeandim,1,'last');
126   
127    %%%%% Extraction des donnees %%%%%
128    extracteddata = data(1:size(data,1),indicemin:indicemax,1:size(data,3));
129   
130elseif numdimtomean == 3;
131   
132    %%%%% Recherche des indices %%%%%
133    indicemin = find(dim3 >= minmeandim,1,'first');
134    indicemax = find(dim3 <= maxmeandim,1,'last');
135   
136    %%%%% Extraction des donnees %%%%%
137    extracteddata = data(1:size(data,1),1:size(data,2),indicemin:indicemax);
138   
139end
140
141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
142
143
144%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
145% Moyennage sur la dimension spatiale selectionne
146%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
147
148if numdimtomean == 2;
149    hovdata = squeeze(mean(extracteddata,2));
150elseif numdimtomean == 3;
151    hovdata = squeeze(mean(extracteddata,3));
152end
153
154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
155
156
157%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
158% Dessin du diagramme de Hovmuller
159%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
160
161%%%%% Ouverture d'une figure
162h=figure;
163
164%%%%% Calculs pour l'affichage de la coordonnee temporelle %%%%%
165% Nombre de 'tick' temporel maximum.
166nbtickmax = 10;
167
168% Nombre de pas de temps.
169nbtimestep = size(data,1);
170
171% On cherche le pas d'affichage des pas de temps pour ne pas depasser la
172% limite autorisee (on prend l'arrondi superieur avec la fonction 'ceil').
173tickstep = ceil(nbtimestep / nbtickmax);
174
175% On garde les numero dans temps a afficher.
176numtime = 1 : tickstep : nbtimestep;
177
178% On enregistre les futures 'ticklabel' sous forme de caracteres.
179time = datestr(dim1(numtime),'mmm dd');
180
181if numdimtomean == 2;
182   
183    %%%%% Image du diagramme %%%%%
184    % On veut un diagramme latitudes vs temps, il faut donc transposer la
185    % matrice de donnees.
186    imagesc(dim1,dim3,hovdata');
187    set(gca,'ydir','normal');
188   
189    %%%%% Axes du diagramme %%%%%
190    set(gca,'xtick',dim1(numtime));
191    set(gca,'xticklabel',time);
192    ylabel('Latitudes');
193   
194    %%%%% Titre du diagramme %%%%%
195    title(['Diagramme de hovmuller des ' nomvar ' sur ' num2str(extmeandim) ' degres autour de ' num2str(centralvalue) ' en longitudes']);
196   
197elseif numdimtomean == 3;
198   
199    %%%%% Image du diagramme %%%%%
200    % On veut un diagramme temps vs longitudes.
201    imagesc(dim2,dim1,hovdata);
202    set(gca,'ydir','normal');
203   
204    %%%%% Axes du diagramme %%%%%
205    xlabel('Longitudes');
206    set(gca,'ytick',dim1(numtime));
207    set(gca,'yticklabel',time);
208   
209    %%%%% Titre du diagramme %%%%%
210    title(['Diagramme de hovmuller des ' nomvar ' sur ' num2str(extmeandim) ' degres autour de ' num2str(centralvalue) ' en latitudes']);
211end
212
213%%%%% Ajout d'une barre de couleur %%%%%
214colorbar
215
216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
217
218end
219
220%!demo
221%! % school example longitudes
222%! clear all
223%! close all
224%! data(1,:,:) = reshape(1:100,10,10);
225%! for i=2:50;
226%!     data(i,:,:)=data(i-1,:,:)+2;
227%! end
228%! dim1 = datenum(2011,07,27) : datenum(2011,07,27)+49;
229%! dim2 = -4.5:4.5;
230%! dim3 = 0.5:9.5;
231%! numdimtomean=2;
232%! centralvalue=0;
233%! extmeandim=2;
234%! nomvar='valeurs tests pour la demonstration';
235%! [hovdata] = hovmullerlonorlat(data, dim1, dim2, dim3, numdimtomean, centralvalue, extmeandim, nomvar);
236
237%!demo
238%! % school example latitude
239%! clear all
240%! close all
241%! data(1,:,:) = reshape(1:100,10,10);
242%! for i=2:50;
243%!     data(i,:,:)=data(i-1,:,:)+2;
244%! end
245%! dim1 = datenum(2011,07,27) : datenum(2011,07,27)+49;
246%! dim2 = -4.5:4.5;
247%! dim3 = 0.5:9.5;
248%! numdimtomean=3;
249%! centralvalue=0;
250%! extmeandim=3;
251%! nomvar='valeurs tests pour la demonstration';
252%! [hovdata] = hovmullerlonorlat(data, dim1, dim2, dim3, numdimtomean, centralvalue, extmeandim, nomvar);
Note: See TracBrowser for help on using the repository browser.