1 | ;+ |
---|
2 | ; |
---|
3 | ; trace des graphes hovmoller avec axe generalise |
---|
4 | ; |
---|
5 | ; @categories |
---|
6 | ; Graphics, trace des graphes hovmoller: gt |
---|
7 | ; |
---|
8 | ; @param TAB {in}{required}{type=array or struct} |
---|
9 | ; le champ dont on veut faire le hovmoller champ |
---|
10 | ; peut etre de 2 types: |
---|
11 | ; 1) un tableau qui peut etre: |
---|
12 | ; * 3d ou 4d: la derniere composante etant le temps. dans ce |
---|
13 | ; cas, le tableau va passer dans grossemoyenne pour etre |
---|
14 | ; moyenné suivant et devenir un tableau 2d ou 1d. |
---|
15 | ; * 2d: si tableau est deja 2d, il n''est pas modifie |
---|
16 | ; (attention les terres doivent etre masquees a la valeure |
---|
17 | ; valmask) et type doit qd meme etre specifie pour qu''on |
---|
18 | ; sache de quel trace il sagit. Pour avoir une legende |
---|
19 | ; correcte, respecifier la zone d''extraction via BOITE |
---|
20 | ; * 1d: uniquement pour les traces de type 't'. Type doit qd |
---|
21 | ; meme etre specifie pour qu''on sache de quel trace il |
---|
22 | ; sagit. Pour avoir une legende correcte, respecifier la zone |
---|
23 | ; d''extraction via BOITE |
---|
24 | ; 2) une structure repondant aux critères specifies par |
---|
25 | ; <pro>litchamp</pro>. |
---|
26 | ; cf. IDL> xhelp,'litchamp'. Le tableau contennu ds |
---|
27 | ; la structure repondant aux criteres du cas 1) cf. ci-dessus |
---|
28 | ; |
---|
29 | ; @param GAXIS {in} |
---|
30 | ; |
---|
31 | ; @param GIVENMAX {in}{optional} |
---|
32 | ; valeur maximum que l''on veut prendre en compte dans le trace |
---|
33 | ; des contours. Par defaut on prend le max de tableau (sur les pts mer) |
---|
34 | ; |
---|
35 | ; @param GIVENMIN {in}{optional} |
---|
36 | ; valeur minimum que l''on veut prendre en compte dans le trace |
---|
37 | ; des contours. Par defaut on prend le min de tableau (sur les pts |
---|
38 | ; mer) |
---|
39 | ; |
---|
40 | ; @param DATMIN {in}{optional} |
---|
41 | ; c''est la borne inf de l''axe temporel. c''est un |
---|
42 | ; longinteger de la forme yyyymmdd (ou bien yymmdd). |
---|
43 | ; |
---|
44 | ; @param DATMAX {in}{optional} |
---|
45 | ; c''est la borne max de l''axe temporel. c''est un |
---|
46 | ; longinteger de la forme yyyymmdd (ou bien yymmdd) |
---|
47 | ; |
---|
48 | ; @keyword BOITE |
---|
49 | ; vecteur indiquant la zone geographique (3d) sur laquelle doit |
---|
50 | ; etre fait l''extraction du champ pour faire le hovmoeller. |
---|
51 | ; Si BOITE a : |
---|
52 | ; 1 element : l''extraction est faite sur [lon1, lon2, lat1, lat2, 0.,boite[0]] |
---|
53 | ; 2 elements: l''extraction est faite sur [lon1, lon2, lat1, lat2, boite[0],boite[1]] |
---|
54 | ; 4 elements: l''extraction est faite sur [Boite, prof1, prof2] |
---|
55 | ; 5 elements: l''extraction est faite sur [Boite[0:3], 0, Boite[4]] |
---|
56 | ; 6 elements: l''extraction est faite sur Boite |
---|
57 | ; |
---|
58 | ; Ou lon1, lon2,lat1,lat2,prof1,prof2 sont les variables globales |
---|
59 | ; definies lors du dernier domdef! |
---|
60 | ; |
---|
61 | ; @keyword CONTINTERVALLE |
---|
62 | ; lorsque CONTOUR est active, valeur d''un |
---|
63 | ; intervalle entre deux isolignes traces par un trait ds la couleur |
---|
64 | ; c_lab. Il peut ainsi etre different de celui specifie par INTERVALLE |
---|
65 | ; qui, cas ce cas, ne controle que les isolignes coloriees en |
---|
66 | ; couleurs. Si aucun min n''est specifie, on choisit un contour min qui va |
---|
67 | ; bien avec l''intervalle specifie!. Si ce mot cle n''est pas |
---|
68 | ; specifie, on trace 20 isolignes du min au max. |
---|
69 | ; |
---|
70 | ; @keyword CONTLABEL |
---|
71 | ; un entier n. lorsque CONTOUR est active, si n |
---|
72 | ; different de 0, choisit le type de label correspondant aux cas n |
---|
73 | ; pour les isolignes tracees par un trait. Pour specifier le type de |
---|
74 | ; label du contour en couleur, utiliser LABEL |
---|
75 | ; |
---|
76 | ; @keyword CONTMAX |
---|
77 | ; lorsque CONTOUR est active, valeur maximum que l''on |
---|
78 | ; veut prendre en compte dans le trace des isolignes traces par un |
---|
79 | ; trait de couleur c_lab. Par defaut on prend le max (sur les pts mer) |
---|
80 | ; du tableau passe ds le mot cle CONTOUR. |
---|
81 | ; |
---|
82 | ; @keyword CONTMIN |
---|
83 | ; lorsque CONTOUR est active, valeur minimum que l''on |
---|
84 | ; veut prendre en compte dans le trace des isolignes traces par un |
---|
85 | ; trait de couleur c_lab. Par defaut on prend le max (sur les pts mer) |
---|
86 | ; du tableau passe ds le mot cle CONTOUR. |
---|
87 | ; |
---|
88 | ; @keyword CONTNLEVEL |
---|
89 | ; lorsque CONTOUR est active, nombre de contours |
---|
90 | ; trace par un trait de couleur c_lab a dessiner (actif si |
---|
91 | ; CONTLABEL=0) par defaut =20. |
---|
92 | ; |
---|
93 | ; @keyword CONTOUR |
---|
94 | ; si on veut tracer les contours d''un champ different que celui |
---|
95 | ; que l''on dessin en couleur (par ex E-P en couleur et QSR en |
---|
96 | ; contours). Doit etre un champ reponadnt aux meme caracteristiques |
---|
97 | ; que l''argument numero 1 de pltt |
---|
98 | ; |
---|
99 | ; @keyword ENDPOINTS |
---|
100 | ; mot clef specifiant que l'on veut faire une coupe |
---|
101 | ; verticale en diagonale. les coordonnees des extremites de |
---|
102 | ; celle-ci sont alors definies les 4 elements du vecteur |
---|
103 | ; ENDPOINTS: [x1,y1,x2,y2] qui sont les coordonnees |
---|
104 | ; |
---|
105 | ; @keyword EXCHANGE_XY |
---|
106 | ; permet d''intervertir les axes. |
---|
107 | ; |
---|
108 | ; @keyword FILTER |
---|
109 | ; applique une moyenne glissante de largeur FILTER |
---|
110 | ; |
---|
111 | ; @keyword INTERVALLE |
---|
112 | ; valeur d''un intervalle entre deux isolignes. Si |
---|
113 | ; aucun min n''est specifie, on choisit un contour min qui va bien |
---|
114 | ; avec l''intervalle specifie!. Si ce mot cle n''est pas specifie, on |
---|
115 | ; trace 20 isolignes du min au max. Rq: Qd CONTOUR est active |
---|
116 | ; INTERVALLE ne specifie que intervalle entre 2 isolignes coloriees en |
---|
117 | ; couleur. Pour specifier l''intervalle entre 2 isolignes traces par un trait |
---|
118 | ; de couleur c_lab utiliser CONTINTERVALLE. |
---|
119 | ; |
---|
120 | ; @keyword INV |
---|
121 | ; inverse le vecteur couleur utilise pour colorier le graphe |
---|
122 | ; (sans toucher au noir, au blanc et a la palette utilisee) |
---|
123 | ; |
---|
124 | ; @keyword LABEL |
---|
125 | ; un entier n. si n different de 0, choisit le type de |
---|
126 | ; label correspondant aux cas n. cf <pro>label</pro> |
---|
127 | ; Rq: Qd CONTOUR est active, ne specifie le type de label que pour les |
---|
128 | ; isolignes coloriees en couleur. Pour celles tracees par un trait de |
---|
129 | ; couleur c_lab utiliser CONTLABEL. |
---|
130 | ; |
---|
131 | ; @keyword COL1d |
---|
132 | ; --OBSOLETE-- |
---|
133 | ; numero de la couleur qd on fait un trace 1d |
---|
134 | ; par defaut, 0. il faut mieux utiliser le mot cle COLOR utilise |
---|
135 | ; par plot |
---|
136 | ; |
---|
137 | ; @keyword MAXIN |
---|
138 | ; permet de specifier la valeur maximum que l''on veut |
---|
139 | ; prendre en compte dans le trace des contours a l''aide d''un |
---|
140 | ; mot cle plutot que par l''argument max. Si l''argument et le |
---|
141 | ; mot cle sont specifies en meme temps, c''est la valeur |
---|
142 | ; specifiee par le mot cle qui est retenue. |
---|
143 | ; |
---|
144 | ; @keyword MININ |
---|
145 | ; permet de specifier la valeur minimum que l''on veut |
---|
146 | ; prendre en compte dans le trace des contours a l''aide d''un |
---|
147 | ; mot cle plutot que par l''argument min. Si l''argument et le |
---|
148 | ; mot cle sont specifies en meme temps, c''est la valeur |
---|
149 | ; specifiee par le mot cle qui est retenue. |
---|
150 | ; |
---|
151 | ; @keyword NLEVEL |
---|
152 | ; nombre de contours a dessiner. par defaut =20. actif si |
---|
153 | ; LABEL=0 ou n''est pas specifie. |
---|
154 | ; |
---|
155 | ; @keyword CONTNLEVEL |
---|
156 | ; nombre de contours a dessiner qd on utilise ajoutcontour |
---|
157 | ; active par le mot cle CONTOUR.(actif si CONTLABEL=0) par defaut =20. |
---|
158 | ; |
---|
159 | ; @keyword OV1D |
---|
160 | ; permet de surimprimer un courbe 1d a un precedent trace 1d. |
---|
161 | ; |
---|
162 | ; @keyword OVERPLOT |
---|
163 | ; pour faire un pltt par dessus un autre. Rq: |
---|
164 | ; contrairemnet a l''utilisation de CONTOUR, |
---|
165 | ; l''utilisation de ce mot clef ne modifie pas la legende ou/et |
---|
166 | ; la barre de couleur. dans le cas d''un plot 1d, contrairement |
---|
167 | ; a ov1d, on peut changer les axes et les ranges. |
---|
168 | ; |
---|
169 | ; @keyword REPEAT_C |
---|
170 | ; =n pour repeter une serie temporelle n fois |
---|
171 | ; |
---|
172 | ; @keyword STRICTFILL |
---|
173 | ; activer ce mot clef pour que le remplissage des |
---|
174 | ; contours ce fasse precisement entre le min et le max specifie |
---|
175 | ; en laissant en banc les valeurs inferieurs au min specifie et |
---|
176 | ; superieurs au max specifie. |
---|
177 | ; |
---|
178 | ; @keyword STYLE |
---|
179 | ; style de tracer a adopter pour dessiner les isolignes par |
---|
180 | ; defaut style=0. cf <pro>style</pro> |
---|
181 | ; |
---|
182 | ; @keyword STY1D |
---|
183 | ; --OBSOLETE-- |
---|
184 | ; numero du style utilise lors d''un trace |
---|
185 | ; 1d. Il faut mieux utiliser le mot cle LINESTYLE qui est celui |
---|
186 | ; de plot. Attention ce mot cle est encore utile si on veut |
---|
187 | ; faire des barres plutot qu''une courbe, mettre sty1d='bar' |
---|
188 | ; |
---|
189 | ; @keyword TREND_TYPE |
---|
190 | ; modify data by calling <propost_it>trends</propost_it> |
---|
191 | ; |
---|
192 | ; @keyword TYPEIN |
---|
193 | ; permet de specifier la valeur type de hovmoller que |
---|
194 | ; l''on veut faire: |
---|
195 | ; 'xt','yt','zt','t' |
---|
196 | ; a l''aide d''un mot cle plutot que par l''argument type Si |
---|
197 | ; l''argument et le mot cle sont specifies en meme temps, c''est |
---|
198 | ; la valeur specifiee par le mot cle qui est retenue. |
---|
199 | ; |
---|
200 | ; @keyword XT |
---|
201 | ; |
---|
202 | ; @keyword YT |
---|
203 | ; |
---|
204 | ; @keyword ZT |
---|
205 | ; |
---|
206 | ; @keyword TT |
---|
207 | ; |
---|
208 | ; @keyword _EXTRA |
---|
209 | ; |
---|
210 | ; @uses |
---|
211 | ; <pro>common</pro> |
---|
212 | ; <pro>juldate</pro> |
---|
213 | ; |
---|
214 | ; @todo |
---|
215 | ; return dans un PRO ?! |
---|
216 | ; |
---|
217 | ; validation de type TAB |
---|
218 | ; |
---|
219 | ; replace juldate call be a non-obsolete function |
---|
220 | ; |
---|
221 | ; @history |
---|
222 | ; - fplod 20100119T160644Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
223 | ; |
---|
224 | ; * check parameters |
---|
225 | ; |
---|
226 | ; - Sebastien Masson (smasson\@lodyc.jussieu.fr) |
---|
227 | ; 27/5/98 |
---|
228 | ; |
---|
229 | ; - Jerome Vialard (adapting plt to hovmoller drawing) |
---|
230 | ; 2/7/98 |
---|
231 | ; |
---|
232 | ; - Sebastien Masson 14/8/98 (continents,barres) |
---|
233 | ; 15/1/98 |
---|
234 | ; adaptation pour les tableaux 3 et 4d pour que la moyenne soit faite |
---|
235 | ; dans pltt plutot que lors de la lecture. |
---|
236 | ; |
---|
237 | ; - Sebastien Masson 14/8/98 |
---|
238 | ; |
---|
239 | ; - Eric Guilyardi 29/7/99 |
---|
240 | ; |
---|
241 | ; * FILTER, TREND_TYPE, REPEAT_C |
---|
242 | ; |
---|
243 | ; - Sebastien Masson 08/02/2000 |
---|
244 | ; |
---|
245 | ; * checkfield and usetri keyword. |
---|
246 | ; |
---|
247 | ; @version |
---|
248 | ; $Id$ |
---|
249 | ; |
---|
250 | ;- |
---|
251 | PRO plttg,tab,gaxis,givenmin,givenmax,datmin,datmax $ |
---|
252 | , BOITE=boite $ |
---|
253 | , CONTOUR=contour $ |
---|
254 | , ENDPOINTS=endpoints $ |
---|
255 | , INTERVALLE=intervalle $ |
---|
256 | , INV=inv $ |
---|
257 | , CONTINTERVALLE=contintervalle $ |
---|
258 | , LABEL=label $ |
---|
259 | , CONTLABEL=contlabel $ |
---|
260 | , STYLE=style $ |
---|
261 | , CONTMAX=contmax $ |
---|
262 | , CONTMIN=contmin $ |
---|
263 | , NLEVEL=nlevel $ |
---|
264 | , CONTNLEVEL=contnlevel $ |
---|
265 | , COL1D=col1d $ |
---|
266 | , STY1D=sty1d $ |
---|
267 | , MININ=minin $ |
---|
268 | , MAXIN=maxin $ |
---|
269 | , OV1D=ov1d $ |
---|
270 | , FILTER=filter $ |
---|
271 | , TREND_TYPE=trend_type $ |
---|
272 | , REPEAT_C=repeat_c $ |
---|
273 | , TYPEIN=typein $ |
---|
274 | , XT=xt $ |
---|
275 | , YT=yt $ |
---|
276 | , ZT=zt $ |
---|
277 | , TT=tt $ |
---|
278 | , STRICTFILL=strictfill $ |
---|
279 | , OVERPLOT=overplot $ |
---|
280 | , EXCHANGE_XY=exchange_xy $ |
---|
281 | , _EXTRA=extra |
---|
282 | ; |
---|
283 | compile_opt idl2, strictarrsubs |
---|
284 | ; |
---|
285 | @common |
---|
286 | |
---|
287 | usage='plttg,tab,gaxis,givenmin,givenmax,datmin,datmax' $ |
---|
288 | + ', BOITE=boite' $ |
---|
289 | + ', CONTOUR=contour' $ |
---|
290 | + ', ENDPOINTS=endpoints' $ |
---|
291 | + ', INTERVALLE=intervalle' $ |
---|
292 | + ', INV=inv' $ |
---|
293 | + ', CONTINTERVALLE=contintervalle' $ |
---|
294 | + ', LABEL=label' $ |
---|
295 | + ', CONTLABEL=contlabel' $ |
---|
296 | + ', STYLE=style ' $ |
---|
297 | + ', CONTMAX=contmax' $ |
---|
298 | + ', CONTMIN=contmin' $ |
---|
299 | + ', NLEVEL=nlevel' $ |
---|
300 | + ', CONTNLEVEL=contnlevel' $ |
---|
301 | + ', COL1D=col1d ' $ |
---|
302 | + ', STY1D=sty1d' $ |
---|
303 | + ', MININ=minin' $ |
---|
304 | + ', MAXIN=maxin' $ |
---|
305 | + ', OV1D=ov1d' $ |
---|
306 | + ', FILTER=filter' $ |
---|
307 | + ', TREND_TYPE=trend_type' $ |
---|
308 | + ', REPEAT_C=repeat_c' $ |
---|
309 | + ', TYPEIN=typein' $ |
---|
310 | + ', XT=xt' $ |
---|
311 | + ', YT=yt' $ |
---|
312 | + ', ZT=zt' $ |
---|
313 | + ', TT=tt' $ |
---|
314 | + ', STRICTFILL=strictfill' $ |
---|
315 | + ', OVERPLOT=overplot' $ |
---|
316 | + ', EXCHANGE_XY=exchange_xy' $ |
---|
317 | + ', _EXTRA=extra' |
---|
318 | ; |
---|
319 | nparam = N_PARAMS() |
---|
320 | IF (nparam LT 6) THEN BEGIN |
---|
321 | ras = report(['Incorrect number of arguments.' $ |
---|
322 | + '!C' $ |
---|
323 | + 'Usage : ' + usage]) |
---|
324 | stop |
---|
325 | ENDIF |
---|
326 | |
---|
327 | giventype = 'yt' |
---|
328 | ;------------------------------------------------------------ |
---|
329 | tempsun = systime(1) ; pour key_performance |
---|
330 | ;-------------------------------------------------------------- |
---|
331 | ; I2) reinitialisation. !p.,!x.,!y. |
---|
332 | ; Rq: on ne reinitialise pas qd on rapelle plt en boucle pour utiliser contour |
---|
333 | ;-------------------------------------------------------------- |
---|
334 | IF n_elements(contour) ne 4 AND NOT keyword_set(overplot) $ |
---|
335 | AND NOT keyword_set(ov1d) THEN BEGIN |
---|
336 | reinitplt |
---|
337 | ENDIF |
---|
338 | ;-------------------------------------------------------------- |
---|
339 | ; I1) lecture du champ |
---|
340 | ;-------------------------------------------------------------- |
---|
341 | IF keyword_set(boite) THEN BEGIN |
---|
342 | oldboite = [lon1, lon2, lat1, lat2, prof1, prof2] |
---|
343 | ENDIF |
---|
344 | IF n_elements(giventype) NE 0 THEN BEGIN |
---|
345 | type = giventype |
---|
346 | ENDIF |
---|
347 | IF n_elements(givenmin) NE 0 THEN BEGIN |
---|
348 | min = givenmin |
---|
349 | ENDIF |
---|
350 | IF n_elements(givenmax) NE 0 THEN BEGIN |
---|
351 | max = givenmax |
---|
352 | ENDIF |
---|
353 | IF n_elements(minin) NE 0 THEN BEGIN |
---|
354 | min = minin |
---|
355 | ENDIF |
---|
356 | IF n_elements(maxin) NE 0 THEN BEGIN |
---|
357 | max = maxin |
---|
358 | ENDIF |
---|
359 | IF keyword_set(typein) THEN BEGIN |
---|
360 | IF size(type, /type) NE 7 AND size(type, /type) NE 0 THEN BEGIN |
---|
361 | IF n_elements(min) NE 0 THEN BEGIN |
---|
362 | max = min |
---|
363 | ENDIF |
---|
364 | min = type |
---|
365 | ENDIF |
---|
366 | type = typein |
---|
367 | ENDIF |
---|
368 | |
---|
369 | z2d = tab |
---|
370 | mask = 1 |
---|
371 | |
---|
372 | ;--------------------------------------------------------------- |
---|
373 | ; selection du type de graphique. |
---|
374 | ;--------------------------------------------------------------- |
---|
375 | ;--------------------------------------------------------------- |
---|
376 | ; repetition de la serie temporelle |
---|
377 | ;--------------------------------------------------------------- |
---|
378 | |
---|
379 | IF NOT keyword_set(repeat_c) THEN BEGIN |
---|
380 | repeat_c = 1 |
---|
381 | ENDIF |
---|
382 | |
---|
383 | temps = time[0:jpt-1] |
---|
384 | IF repeat_c GT 1 THEN BEGIN |
---|
385 | taille=size(z2d) |
---|
386 | CASE taille[0] OF |
---|
387 | 1: z2d = reform(z2d#replicate(1, repeat_c), taille[1]*repeat_c) |
---|
388 | 2: BEGIN |
---|
389 | z2d = z2d[*]#replicate(1, repeat_c) |
---|
390 | z2d = reform(z2d, taille[1], taille[2]*repeat_c, /over) |
---|
391 | END |
---|
392 | ELSE: |
---|
393 | ENDCASE |
---|
394 | temps = [temps, (lindgen(jpt*(REPEAT_c-1))+1)*(temps[1]-temps[0])+temps[jpt-1]] |
---|
395 | ENDIF |
---|
396 | |
---|
397 | ;---------------------------------------------------------------------------- |
---|
398 | ; determination du mi:min et du ma:max de z2d ainsi que de max: max et |
---|
399 | ; min: min pour le dessin. |
---|
400 | ;----------------------------------------------------------------------------- |
---|
401 | ; faudra-t-il faire un autoscale ??? |
---|
402 | autoscale = testvar(var = min) EQ testvar(var = max) AND NOT keyword_set(intervalle) |
---|
403 | determineminmax, z2d, mask, mi, ma, MININ = min, MAXIN = max, nan = nan, INTERVALLE = intervalle |
---|
404 | IF z2d[0] EQ -1 THEN BEGIN |
---|
405 | return |
---|
406 | ENDIF |
---|
407 | ; on fait un autoscale si besoin |
---|
408 | IF autoscale THEN BEGIN |
---|
409 | autoscale, min, max, intervalle |
---|
410 | ENDIF |
---|
411 | ;----------------------------------------------------------------------------- |
---|
412 | ;----------------------------------------------------------------------------- |
---|
413 | IF n_elements(contour) ne 4 AND NOT keyword_set(overplot) THEN BEGIN |
---|
414 | placedessin, 'pltt',posfenetre, posbar, contour = contour, direc = direc, type = type, endpoints = endpoints, _EXTRA=extra |
---|
415 | ENDIF |
---|
416 | ;-------------------------------------------------------------- |
---|
417 | ;-------------------------------------------------------------- |
---|
418 | ; 2eme partie: dessin |
---|
419 | ;-------------------------------------------------------------- |
---|
420 | ;----------------------------------------------------------- |
---|
421 | ; definition des axes |
---|
422 | ;---------------------------------------------------------- |
---|
423 | ;----------------------------------------------------------------------------- |
---|
424 | ; definition des vecteurs abscisse et ordonee |
---|
425 | ; la triangulation est definie pour que le trace soit effectue du bas |
---|
426 | ; a gauche vers le haut a droite. il faut donc la matrice e contourer |
---|
427 | ; se presente de cette maniere, d''ou certains transpose et reverse |
---|
428 | ;----------------------------------------------------------------------------- |
---|
429 | ;----------------------------------------------------------------------------- |
---|
430 | ; definition des bornes de l''axe temporel |
---|
431 | ;----------------------------------------------------------------------------- |
---|
432 | CASE N_PARAMS() OF |
---|
433 | 5 : BEGIN |
---|
434 | tempsmin = juldate(datmin, _EXTRA=extra) |
---|
435 | tempsmax = temps[(jpt*repeat_c)-1] |
---|
436 | END |
---|
437 | 6 : BEGIN |
---|
438 | tempsmin = juldate(datmin, _EXTRA=extra) |
---|
439 | tempsmax = juldate(datmax, _EXTRA=extra) |
---|
440 | END |
---|
441 | ELSE: BEGIN |
---|
442 | tempsmin = temps[0] |
---|
443 | tempsmax = temps[(jpt*repeat_c)-1] |
---|
444 | END |
---|
445 | ENDCASE |
---|
446 | ;----------------------------------------------------------------------------- |
---|
447 | ; on shift l''axe du temps pour des questions de precision sur les |
---|
448 | ; dates du calendier julien en long qui sont passes en float ds les axes |
---|
449 | yy = gaxis |
---|
450 | xx = temps-tempsmin |
---|
451 | ;-------------------------------------------------------------- |
---|
452 | IF NOT keyword_set(overplot) THEN BEGIN |
---|
453 | axe, type, tempsmin, tempsmax, plttg = 1, _EXTRA=extra |
---|
454 | ENDIF ELSE BEGIN |
---|
455 | !x.range=!x.range-tempsmin |
---|
456 | !x.tickv=!x.tickv-tempsmin |
---|
457 | ENDELSE |
---|
458 | ;------------------------------------------------------------ |
---|
459 | ;------------------------------------------------------------ |
---|
460 | ; dessin |
---|
461 | ;------------------------------------------------------------ |
---|
462 | ; 2d |
---|
463 | ;------------------------------------------------------------ |
---|
464 | ;-------------------------------------------------------------- |
---|
465 | ; choix des labels |
---|
466 | ;----------------------------------------------------------- |
---|
467 | IF keyword_set(intervalle) AND NOT keyword_set(label) THEN BEGIN |
---|
468 | label=1 |
---|
469 | ENDIF |
---|
470 | IF keyword_set(label) eq 0 THEN BEGIN |
---|
471 | cas=0 |
---|
472 | ENDIF ELSE BEGIN |
---|
473 | cas=label |
---|
474 | ENDELSE |
---|
475 | label,cas,min,max,ncontour,level_z2d,NLEVEL=nlevel,INTERVALLE=intervalle, strictfill = strictfill |
---|
476 | ;-------------------------------------------------------------- |
---|
477 | ; choix de style |
---|
478 | ;----------------------------------------------------------- |
---|
479 | IF not keyword_set(style) THEN BEGIN |
---|
480 | style=0 |
---|
481 | ENDIF |
---|
482 | style,style,level_z2d,linestyle,thick |
---|
483 | IF keyword_set(inv) THEN BEGIN |
---|
484 | couleur=reverse(couleur) |
---|
485 | ENDIF |
---|
486 | ;---------------------------------------------------------------------- |
---|
487 | nby = n_elements(yy) |
---|
488 | nbx = n_elements(xx) |
---|
489 | xx = xx#replicate(1, nby) ; on passe les axes en tableaux 2d |
---|
490 | yy = replicate(1, nbx)#yy |
---|
491 | |
---|
492 | triangulation = -1 |
---|
493 | ;---------------------------------------------------------------------- |
---|
494 | pltbase,z2d, xx, yy, mask,xx, yy, level_z2d, couleur, contour = contour,/noerase $ |
---|
495 | , c_linestyle=linestyle,c_labels=1-(indgen(n_elements(level_z2d)) MOD 2) $ |
---|
496 | , trichamp = triangulation, trimsk = triangulation, overplot = overplot $ |
---|
497 | , c_thick=thick, performance = key_performance, usetri = keyword_set(nan) $ |
---|
498 | , coinmontemask=coinmontemask, coindescendmask=coindescendmask, _EXTRA=extra |
---|
499 | ;------------------------------------------------------------ |
---|
500 | IF n_elements(contour) eq 4 THEN BEGIN ; c''est la 2eme fois que je passe ds pltt |
---|
501 | contour = {mietma:[mi, ma], unit:varunit, inter:intervalle} ; je renvoie le min, le max et l''unite |
---|
502 | return |
---|
503 | ENDIF |
---|
504 | ;------------------------------------------------------------ |
---|
505 | IF keyword_set(contour) THEN BEGIN |
---|
506 | pourlegende = [1, 1, 1, 1] |
---|
507 | oldattributs = saveatt() |
---|
508 | oldcouleur = couleur |
---|
509 | plttg,contour,gaxis, contmin,contmax,CONTOUR=pourlegende, /noerase, USETRI = usetri $ |
---|
510 | ,INTERVALLE=contintervalle,LABEL=contlabel,STYLE=style, ENDPOINTS = endpoints $ |
---|
511 | ,NLEVEL=contnlevel,YSURX=ysurx, BOITE = boite, STRICTFILL = strictfill, _EXTRA=extra |
---|
512 | couleur = oldcouleur |
---|
513 | restoreatt, oldattributs |
---|
514 | ENDIF |
---|
515 | ;---------------------------------------------------------------------- |
---|
516 | ;---------------------------------------------------------------------- |
---|
517 | IF keyword_set(overplot) THEN BEGIN |
---|
518 | GOTO, fini |
---|
519 | ENDIF |
---|
520 | ;------------------------------------------------------------ |
---|
521 | ; legendes + affichage de celles-ci |
---|
522 | ;------------------------------------------------------------ |
---|
523 | legende,mi,ma,type, CONTOUR = pourlegende, DIREC = direc, INTERVALLE = intervalle $ |
---|
524 | , plttg = 1, _EXTRA=extra |
---|
525 | plot,[0],[0],/noerase,/nodata,color=c_cote, xstyle = 1, ystyle = 1 |
---|
526 | |
---|
527 | ;------------------------------------------------------------ |
---|
528 | ; barre de couleur |
---|
529 | ;------------------------------------------------------------ |
---|
530 | couleur = couleur[0:ncontour-1-keyword_set(strictfill)] |
---|
531 | barrecouleur, position=posbar,divisions=(ncontour-keyword_set(strictfill))/2,min=min $ |
---|
532 | , max=max,discret=couleur,_EXTRA=extra |
---|
533 | ;------------------------------------------------------------ |
---|
534 | fini: |
---|
535 | ;------------------------------------------------------------ |
---|
536 | ; on remet l''axe du temps en jours julien IDL et non pas en jours |
---|
537 | ; juliens comptes a partir tempsmin |
---|
538 | ;------------------------------------------------------------ |
---|
539 | !x.range=!x.range+tempsmin |
---|
540 | !x.tickv=!x.tickv+tempsmin |
---|
541 | ; on fait un faux plot pour que ces valeurs soient prises en |
---|
542 | ; consideration |
---|
543 | plot,[0], [0], /noerase,xstyle=5, ystyle = 5, title = '', subtitle = '', ytitle = '', xtitle = '' |
---|
544 | ;------------------------------------------------------------ |
---|
545 | ;------------------------------------------------------------ |
---|
546 | terminedessin, _EXTRA=extra |
---|
547 | IF keyword_set(oldboite) THEN BEGIN |
---|
548 | domdef, oldboite,GRILLE=[vargrid, 'T'] |
---|
549 | ENDIF |
---|
550 | ;------------------------------------------------------------ |
---|
551 | IF n_elements(key_performance) NE 0 THEN BEGIN |
---|
552 | IF key_performance EQ 1 THEN BEGIN |
---|
553 | print, 'temps pltt', systime(1)-tempsun |
---|
554 | ENDIF |
---|
555 | ENDIF |
---|
556 | end |
---|