1 | function [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 | |
---|
92 | if nargin~=8; |
---|
93 | error('Tous les arguments n''ont pas ete donnes.') |
---|
94 | end |
---|
95 | |
---|
96 | if size(size(data),2) ~= 3; |
---|
97 | error('Les donnees doivent etre dans une matrice a 3 dimensions.') |
---|
98 | end |
---|
99 | |
---|
100 | if 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).'); |
---|
102 | end |
---|
103 | |
---|
104 | |
---|
105 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
106 | % Creation des bornes sur la dimension moyenne |
---|
107 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
108 | |
---|
109 | minmeandim = centralvalue - extmeandim/2; |
---|
110 | maxmeandim = 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. |
---|
121 | if 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 | |
---|
130 | elseif 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 | |
---|
139 | end |
---|
140 | |
---|
141 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
142 | |
---|
143 | |
---|
144 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
145 | % Moyennage sur la dimension spatiale selectionne |
---|
146 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
147 | |
---|
148 | if numdimtomean == 2; |
---|
149 | hovdata = squeeze(mean(extracteddata,2)); |
---|
150 | elseif numdimtomean == 3; |
---|
151 | hovdata = squeeze(mean(extracteddata,3)); |
---|
152 | end |
---|
153 | |
---|
154 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
155 | |
---|
156 | |
---|
157 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
158 | % Dessin du diagramme de Hovmuller |
---|
159 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
160 | |
---|
161 | %%%%% Ouverture d'une figure |
---|
162 | h=figure; |
---|
163 | |
---|
164 | %%%%% Calculs pour l'affichage de la coordonnee temporelle %%%%% |
---|
165 | % Nombre de 'tick' temporel maximum. |
---|
166 | nbtickmax = 10; |
---|
167 | |
---|
168 | % Nombre de pas de temps. |
---|
169 | nbtimestep = 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'). |
---|
173 | tickstep = ceil(nbtimestep / nbtickmax); |
---|
174 | |
---|
175 | % On garde les numero dans temps a afficher. |
---|
176 | numtime = 1 : tickstep : nbtimestep; |
---|
177 | |
---|
178 | % On enregistre les futures 'ticklabel' sous forme de caracteres. |
---|
179 | time = datestr(dim1(numtime),'mmm dd'); |
---|
180 | |
---|
181 | if 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 | |
---|
197 | elseif 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']); |
---|
211 | end |
---|
212 | |
---|
213 | %%%%% Ajout d'une barre de couleur %%%%% |
---|
214 | colorbar |
---|
215 | |
---|
216 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
217 | |
---|
218 | end |
---|
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); |
---|