source: trunk/PLOTS/DESSINE/pltt.pro @ 2

Last change on this file since 2 was 2, checked in by opalod, 22 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 28.2 KB
Line 
1;------------------------------------------------------------
2;+
3; NAME:
4;       PLTT
5;
6; PURPOSE:
7;       trace des graphes hovmoller
8;
9; CATEGORY:
10;       Graphics, trace des graphes hovmoller: xt,yt,zt,t
11;
12; CALLING SEQUENCE:
13;       pltt, champ,type [,min[, max[, datmin[, datmax]]]]
14;
15; INPUTS:
16;       champ: le champ dont on veut faire le hovmoller champ
17;       peut etre de 2 types:
18;       1) un tableu qui peut etre:
19;          * 3d ou 4d: la derniere composante etant le temps. dans ce
20;            cas, le tableau va passer dans grossemoyenne pour etre
21;            moyennee suivant et devenir un tableau 2d ou 1d.
22;          * 2d: si tableau est deja 2d, il n''est pas modifie
23;            (attention les terres doivent etre masquees a la valeure
24;            valmask) et type doit qd meme etre specifie pour qu''on
25;            sache de quel trace il sagit. Pour avoir une legende
26;            correcte, respecifier la zone d''extraction via BOITE
27;          * 1d: uniquement pour les traces de type 't'. Type doit qd
28;            meme etre specifie pour qu''on sache de quel trace il
29;            sagit. Pour avoir une legende correcte, respecifier la zone
30;            d''extraction via BOITE
31;       2) une structure repondant aux critaire specifies par
32;       litchamp.pro. cf. IDL> xhelp,'litchamp'. Le tableau contennu ds
33;       la structure repondant aux criteres du cas 1) cf. ci-dessus
34;
35;       TYPE: type de hovmoller que l''on veut faire:
36;             'xt','yt','zt','t' 
37;
38; ces arguments ne sont pas obligatoires:
39
40;       MAX: valeur maximum que l''on veut prendre en compte dans le trace
41; des contours. Par defaut on prend le max de tableau (sur les pts mer)
42;
43;       MIN: valeur minimum que l''on veut prendre en compte dans le trace
44; des contours. Par defaut on prend le min de tableau (sur les pts
45; mer)
46;
47;       DATMIN: c''est la borne inf de l''axe temporel. c''est un
48;       longinteger de la forme yyyymmdd (ou bien yymmdd).
49;
50;       DATMAX: c''est la borne max de l''axe temporel. c''est un
51;       longinteger de la forme yyyymmdd (ou bien yymmdd)
52;
53; KEYWORD PARAMETERS:
54;
55;       BOITE:vecteur indiquant la zone geographique (3d) sur laquelle doit
56; etre fait l''extraction du champ pour faire le hovmoeller.
57; Si BOITE a :
58; 1 element : l''extraction est faite sur [lon1, lon2, lat1, lat2, 0.,boite[0]]
59; 2 elements: l''extraction est faite sur [lon1, lon2, lat1, lat2, boite[0],boite[1]]
60; 4 elements: l''extraction est faite sur [Boite, prof1, prof2]
61; 5 elements: l''extraction est faite sur [Boite[0:3], 0, Boite[4]]
62; 6 elements: l''extraction est faite sur Boite
63;
64; Ou lon1, lon2,lat1,lat2,prof1,prof2 sont les variables globales
65; definies lors du dernier domdef!
66;
67;      CB_TITLE: le titre de la colorbar
68;
69;      CB_SUBTITLE: le soustitre de la colorbar
70;
71;      CB_CHARSIZE: The character size of the color bar annotations
72;
73;       CONTINTERVALLE: lorsque CONTOUR est active, valeur d''un
74; intervalle entre deux isolignes traces par un trait ds la couleur
75; c_lab. Il peut ainsi etre different de celui specifie par INTERVALLE
76; qui, cas ce cas, ne controle que les isolignes coloriees en
77; couleurs. Si aucun min n''est specifie, on choisit un contour min qui va
78; bien avec l''intervalle specifie!. Si ce mot cle n''est pas
79; specifie, on trace 20 isolignes du min au max.
80;
81;       CONTLABEL: un entier n. lorsque CONTOUR est active, si n
82; different de 0, choisit le type de label correspondant aux cas n
83; pour les isolignes tracees par un trait. Pour specifier le type de
84; label du contour en couleur, utiliser LABEL
85;
86;       CONTMAX: lorsque CONTOUR est active, valeur maximum que l''on
87; veut prendre en compte dans le trace des isolignes traces par un
88; trait de couleur c_lab. Par defaut on prend le max (sur les pts mer)
89; du tableau passe ds le mot cle CONTOUR.
90;
91;       CONTMIN: lorsque CONTOUR est active, valeur minimum que l''on
92; veut prendre en compte dans le trace des isolignes traces par un
93; trait de couleur c_lab. Par defaut on prend le max (sur les pts mer)
94; du tableau passe ds le mot cle CONTOUR.
95;
96;       CONTNLEVEL: lorsque CONTOUR est active, nombre de contours
97; trace par un trait de couleur c_lab a dessiner (actif si
98; CONTLABEL=0) par defaut =20.
99;
100;       CONTOUR: si on veut tracer les contours d''un champ different que celui
101; que l''on dessin en couleur (par ex E-P en couleur et QSR en
102; contours). Doit etre un champ reponadnt aux meme caracteristiques
103; que l''argument numero 1 de pltt
104;
105;       ENDPOINTS: mot clef specifiant que l'on veut faire une coupe
106;       verticale en diagonale. les coordonnees des extremites de
107;       celle-ci sont alors definies les 4 elements du vecteur
108;       ENDPOINTS: [x1,y1,x2,y2] qui sont les coordonnees
109;
110;       /EXCHANGE_XY: permet d''intervertir les axes.
111;
112;       FILTER: applique une moyenne glissante de largeur FILTER
113;
114;       INTERVALLE: valeur d''un intervalle entre deux isolignes. Si
115; aucun min n''est specifie, on choisit un contour min qui va bien
116; avec l''intervalle specifie!. Si ce mot cle n''est pas specifie, on
117; trace 20 isolignes du min au max. Rq: Qd CONTOUR est active
118; INTERVALLE ne specifie que intervalle entre 2 isolignes coloriees en
119; couleur. Pour specifier l''intervalle entre 2 isolignes traces par un trait
120; de couleur c_lab utiliser CONTINTERVALLE.
121;
122;       /INV: inverse le vecteur couleur utilise pour colorier le graphe
123;             (sans toucher au noir, au blanc et a la palette utilisee)
124;
125;       LABEL: un entier n. si n different de 0, choisit le type de
126; label correspondant aux cas n. cf 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;       /LANDSCAPE: oblige la feuille ou le fenetre a l''ecran a etre
132;       en position "allongee".
133;       
134;       LCT: entier designant le numero de la palette de couleur que
135;       l''on veut utiliser pour le plot.
136;       
137;       COL1d: --OBSOLETE--numero de la couleur qd on fait un trace 1d
138;       par defaut, 0. il faut mieux utiliser le mot cle COLOR utilise
139;       par plot
140;
141;       MAXIN: permet de specifier la valeur maximum que l''on veut
142;       prendre en compte dans le trace des contours a l''aide d''un
143;       mot cle plutot que par l''argument max. Si l''argument et le
144;       mot cle sont specifies en meme temps, c''est la valeur
145;       specifiee par le mot cle qui est retenue.
146;
147;       MININ: permet de specifier la valeur minimum que l''on veut
148;       prendre en compte dans le trace des contours a l''aide d''un
149;       mot cle plutot que par l''argument min. Si l''argument et le
150;       mot cle sont specifies en meme temps, c''est la valeur
151;       specifiee par le mot cle qui est retenue.
152;
153;       NLEVEL: nombre de contours a dessiner. par defaut =20. actif si
154; LABEL=0 ou n''est pas specifie.
155;
156;       CONTNLEVEL: 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;       /NOCOLORBAR: activer si on ne veut pas de colorbar
160;
161;       /NOCONTOUR: activer si on ne veut pas de contour mais juste
162;       les couleurs
163;
164;       /NOCOULEUR: activer si on veut juste les contours en noir et
165;       blanc sur fond blanc
166;
167;       /NOERASE: activer pour faire un dessin a l''ecran sans creer
168; une nouvelle fenetre. Rq: activer ds le cas d''un Postscript de
169; plusieurs traces de type 't' pour ne pas faire un Postscript de
170; plusieurs pages
171;
172;       /OV1D:permet de surimprimer un courbe 1d a un precedent trace 1d.
173;
174;       OVERPLOT: pour faire un pltt par dessus un autre. Rq:
175;       contrairemnet a l''utilisation de CONTOUR,
176;       l''utilisation de ce mot clef ne modifie pas la legende ou/et
177;       la barre de couleur. dans le cas d''un plot 1d, contrairement
178;       a ov1d, on peut changer les axes et les ranges.
179;
180;       PETITDESSIN: vecteur de 3 ou 4 elements, applique pour faire un
181; dessin sur une petite portion de feuille ou d''ecran. il delimite
182; la zone ds laquelle va etre fait le dessin
183; si il a 4 elements:
184;       il est alors constitute des coordonnees -exprime en cm reperes par
185;       rapport au coin en bas a gauche de la feuille ou de la fenetre
186;       (en portrait comme en landscape)- du coin en bas a
187;       gauche et du coin en haut a droite  de la zone de dessin.
188; si il a 3 elements:
189;       Ds ce cas, on divise la fenetre ou l''ecran en PETITDESSIN[0]
190;       colonnes, en PETITDESSIN[1] lignes le dessin se faisant ds la
191;       case numero PETITDESSIN[2].La numerotation commencant en haut
192;       a gauche par le numero 1 et suivant apres dans le sens de
193;       l''ecriture.
194; Par defaut on fait un dessin occupant la plus grande place possible
195; tout en concervant le rapport d''aspect (sauf qd REMPLI est active)
196;
197;       /PORTRAIT: oblige la feuille ou la fenetre a etre en position "debout".
198;
199;       /POST: faire une sortie postscript. Ne marche que si on fait
200;       un seul dessin sur la feuille. Si on fait plusieurs dessins,
201;       utiliser @ps ou plein2dessins
202;
203;       REPEAT_C=n pour repeter une serie temporelle n fois
204;
205;       /REMPLI:oblige le dessin a occuper l''espace maximum definit
206;       par petitdessin
207;
208;       /REVERSE_X: pour inverser l''axe des x (et aussi le dessin)
209;
210;       /REVERSE_Y: pour inverser l''axe des y (et aussi le dessin)
211;
212;       /STRICTFILL: activer ce mot clef pour que le remplissage des
213;       contours ce fasse precisement entre le min et le max specifie
214;       en laissant en banc les valeurs inferieurs au min specifie et
215;       superieurs au max specifie.
216;
217;       STYLE: style de tracer a adopter pour dessiner les isolignes par
218; defaut style=0. cf style.pro
219;
220;       STY1D: --OBSOLETE--numero du style utilise lors d''un trace
221;       1d. Il faut mieux utiliser le mot cle LINESTYLE qui est celui
222;       de plot. Attention ce mot cle est encore utile si on veut
223;       faire des barres plutot qu''une courbe, mettre sty1d='bar'
224;
225;       /TRANS: fait un postscript (active /post automatiquement) et l''imprime
226; -si on le desire- sur un transparant
227;
228;        TREND_TYPE: modify data by calling trends.pro
229;
230;        TYPEIN: permet de specifier la valeur type de hovmoller que
231;        l''on veut faire:
232;             'xt','yt','zt','t' 
233;       a l''aide d''un mot cle plutot que par l''argument type Si
234;       l''argument et le mot cle sont specifies en meme temps, c''est
235;       la valeur specifiee par le mot cle qui est retenue.
236;
237;       /USETRI: pour forcer a utiliser de triangulation.
238;
239;        UNLABSUR: entier n. specifant qu''on ne labelle qu''un
240;        contour sur n. Par defaut unlabsur=2
241;
242;       /UNSUR2: si on veut tracer un countour sur deux. par  defaut trace
243; tous les contours
244;
245;       WINDOW: nimero de la fenetre ou l''on veut faire le graphe (permet
246; d'ouvrir plusieurs fenetres). par defaut on ouvre 'IDL0'
247;
248;       YSURX: rapport d'echelle entre y et x. Par defaut=1
249; Par defaut on adapte pour occupe une grande partie de la feuille en sortie
250; postScript ou pour cree une fenetre pas trop etiree
251;
252; COMMON BLOCKS:
253;       common.pro
254;
255; SIDE EFFECTS:
256;
257; RESTRICTIONS:
258;
259; EXAMPLE:
260;
261; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr)
262;                       27/5/98
263;                       Jerome Vialard (adapting plt to hovmoller drawing)
264;                       2/7/98
265;                       Sebastien Masson 14/8/98 (continents,barres)
266;                       15/1/98
267; adaptation pour les tableaux 3 et 4d pour que la moyenne soit faite
268; dans pltt plutot que lors de la lecture.
269;                       Sebastien Masson 14/8/98
270;                       7/1999
271;                       Eric Guilyardi 29/7/99 FILTER, TREND_TYPE,
272;                       REPEAT_C
273;                       Sebastien Masson 08/02/2000 checkfield and
274;                       usetri keyword.
275;-
276;------------------------------------------------------------
277;------------------------------------------------------------
278;------------------------------------------------------------
279pro pltt,tab,giventype,givenmin,givenmax,datmin,datmax,BOITE = boite, CONTOUR=contour $
280         ,ENDPOINTS=endpoints,INTERVALLE=intervalle,INV=inv  $
281         ,CONTINTERVALLE=contintervalle,LABEL=label,CONTLABEL=contlabel $
282         ,STYLE=style, CONTMAX=contmax, USETRI = usetri $
283         ,CONTMIN=contmin,NLEVEL=nlevel,CONTNLEVEL=contnlevel $
284         ,COL1D=col1d,STY1D=sty1d, MININ = minin, MAXIN = maxin $
285         ,OV1D=ov1d, FILTER = filter, TREND_TYPE = trend_type $
286         ,REPEAT_C = repeat_c, TYPEIN = typein, XT = XT, YT = YT, ZT = zt $
287         , TT = tt, STRICTFILL = strictfill, OVERPLOT = overplot, EXCHANGE_XY = exchange_xy $
288         , _extra = ex
289@common
290;------------------------------------------------------------
291   tempsun = systime(1)         ; pour key_performance
292;--------------------------------------------------------------
293; I2) reinitialisation. !p.,!x.,!y.
294; Rq: on ne reinitialise pas qd on rapelle plt en boucle pour utiliser contour
295;--------------------------------------------------------------
296   if n_elements(contour) ne 4 AND NOT keyword_set(overplot) $
297    AND NOT keyword_set(ov1d) then reinitplt
298;--------------------------------------------------------------
299; I1) lecture du champ
300;--------------------------------------------------------------
301   if keyword_set(boite) then oldboite = [lon1, lon2, lat1, lat2, prof1, prof2]
302   if n_elements(giventype) NE 0 then type = giventype
303   if n_elements(givenmin) NE 0 then min = givenmin
304   if n_elements(givenmax) NE 0 then max = givenmax
305   if n_elements(minin) NE 0 then min = minin
306   if n_elements(maxin) NE 0 then max = maxin
307   if keyword_set(typein) then BEGIN
308      if size(type, /type) NE 7 AND size(type, /type) NE 0 then begin
309         if n_elements(min) NE 0 then max = min
310         min = type
311      endif
312      type = typein
313   endif
314   checktypeminmax, 'pltt', TYPE = type, MIN = min, MAX = max, XT = XT, YT = YT, ZT = zt, TT = tt, ENDPOINTS=endpoints, BOITE = boite, _extra = ex
315   if keyword_set(endpoints) then begin
316      section, tab, z2d, glam, gphi, ENDPOINTS = endpoints, TYPE = type, BOITE = boite, DIREC = direc
317      nx = n_elements(glam)
318      ny = nx
319      if strupcase(vargrid) EQ 'W' then begin
320         z = gdepw[premierzw:dernierzw]
321         nz = nzw
322      ENDIF ELSE BEGIN
323         z = gdept[premierzt:dernierzt]
324         nz = nzt
325      ENDELSE
326   ENDIF ELSE BEGIN
327      z2d = checkfield(tab, 'pltt', TYPE = type, BOITE = boite, direc = direc, _extra = ex)
328      if z2d[0] EQ -1 then BEGIN
329         if keyword_set(boite) AND n_elements(oldboite) NE 0 then domdef, oldboite,GRILLE=vargrid
330         return
331      endif
332      grille, mask, glam, gphi, gdep, nx, ny,nz
333   ENDELSE
334;---------------------------------------------------------------
335; calcul de tendance/anomaly suivant TREND_TYPE
336;---------------------------------------------------------------
337
338   IF NOT keyword_set(trend_type) THEN trend_type = 0
339
340   IF trend_type GT 0 THEN z2d = trends(z2d, trend_type, type)
341
342;---------------------------------------------------------------
343; filtrage des donnee dans le cas 't'
344;---------------------------------------------------------------
345
346   IF type EQ 't' AND keyword_set(filter) THEN BEGIN
347      print, '    Applying a running mean filter of width '+string(filter, format = '(I3)')
348      z2d = smooth(z2d, filter)
349      z2d[0:filter/2-1] = 0.
350      z2d[(size(z2d))[1]-filter/2-1:(size(z2d))[1]-1] = 0.
351   ENDIF
352
353;---------------------------------------------------------------
354; repetition de la serie temporelle
355;---------------------------------------------------------------
356
357   IF NOT keyword_set(repeat_c) THEN repeat_c = 1
358
359   temps = time[0:jpt-1]
360   IF repeat_c GT 1 THEN BEGIN
361      taille=size(z2d)
362      CASE taille[0] OF
363         1: z2d = reform(z2d#replicate(1, repeat_c), taille[1]*repeat_c)
364         2: BEGIN
365            z2d = z2d[*]#replicate(1, repeat_c)
366            z2d = reform(z2d, taille[1], taille[2]*repeat_c, /over)
367         END
368         ELSE:
369      ENDCASE
370      temps = [temps, (lindgen(jpt*(REPEAT_c-1))+1)*(temps[1]-temps[0])+temps[jpt-1]]
371   ENDIF
372
373
374;---------------------------------------------------------------
375; selection du type de graphique.
376;---------------------------------------------------------------
377   taille=size(z2d)
378   case taille[0] of
379      2 : begin
380         niveau=1
381         typdes='2d'
382      end
383      1 : begin
384         z1d=z2d
385         typdes='1d'
386         if keyword_set(OV1D) then begin
387            yy = z2d
388            if n_elements(datmin) NE 0 then tempsmin = juldate(datmin, _extra = ex) $
389            ELSE tempsmin = temps[0]
390; on shift l''axe du temps pour des questions de precision sur les
391; dates du calendier julien en long qui sont passes en float ds les axes
392            xx = temps-tempsmin
393            !x.range=!x.range-tempsmin
394            !x.tickv=!x.tickv-tempsmin
395; on fait un faux plot pour appliquer ces changements!
396            plot,[0], [0],/noerase,xstyle=5, ystyle = 5, title = '', subtitle = '', ytitle = '', xtitle = ''
397            goto, trace1d
398         endif
399      end
400   endcase
401; on construit le mask pour cela le tableau doit etre masque (fait
402; automatiquement a la valeur valmask si on passe ds moyenne ou grossemoyenne)
403   mask = fltarr(taille[1], taille[2])
404   nan = total(finite(z2d,/nan)) < 1
405   if n_elements(valmask) EQ 0 then valmask = 1e20
406   if keyword_set(nan) then begin
407      notanum = where(finite(z2d) EQ 0)
408      z2d[notanum] = 0.
409      mask(where(z2d LT valmask/10.)) = 1
410      z2d[notanum] = !values.f_nan
411   ENDIF ELSE mask(where(z2d LT valmask/10)) = 1
412;----------------------------------------------------------------------------
413;   determination du mi:min et du ma:max de z2d ainsi que de max: max et
414;    min: min pour le dessin.
415;-----------------------------------------------------------------------------
416; faudra-t-il faire un autoscale ???
417   autoscale = testvar(var = min) EQ testvar(var = max) AND NOT keyword_set(intervalle)
418   determineminmax, z2d, mask, mi, ma, MININ = min, MAXIN = max, nan = nan, INTERVALLE = intervalle
419   if z2d[0] EQ -1 THEN return
420; on fait un autoscale si besoin
421   if autoscale then autoscale, min, max, intervalle
422;-----------------------------------------------------------------------------
423;-----------------------------------------------------------------------------
424   if n_elements(contour) ne 4  AND NOT keyword_set(overplot) THEN $
425    placedessin, 'pltt',posfenetre, posbar, contour = contour, direc = direc, type = type, endpoints = endpoints, _extra = ex
426;--------------------------------------------------------------
427;--------------------------------------------------------------
428; 2eme partie: dessin
429;--------------------------------------------------------------
430;-----------------------------------------------------------
431;   definition des axes
432;----------------------------------------------------------
433;-----------------------------------------------------------------------------
434; definition des vecteurs abscisse et ordonee
435; la triangulation est definie pour que le trace soit effectue du bas
436; a gauche vers le haut a droite. il faut donc la matrice e contourer
437; se presente de cette maniere, d''ou certains transpose et reverse
438;-----------------------------------------------------------------------------
439;-----------------------------------------------------------------------------
440; definition des bornes de l''axe temporel
441;-----------------------------------------------------------------------------
442   case N_PARAMS() OF
443      5 : begin
444         tempsmin = juldate(datmin, _extra = ex)
445         tempsmax = temps[(jpt*repeat_c)-1]
446      end
447      6 : begin
448         tempsmin = juldate(datmin, _extra = ex)
449         tempsmax = juldate(datmax, _extra = ex)
450      end
451      else : begin
452         tempsmin = temps[0]
453         tempsmax = temps[(jpt*repeat_c)-1]
454      end
455   endcase
456;-----------------------------------------------------------------------------
457; on shift l''axe du temps pour des questions de precision sur les
458; dates du calendier julien en long qui sont passes en float ds les axes
459   case typdes of
460      '1d' : begin
461         yy = z1d
462         xx = temps-tempsmin
463      end
464      '2d' : begin
465         case 1 of
466            type eq 'xt' : BEGIN
467               xx = glam[*, 0]
468               yy = temps-tempsmin
469            end
470            type eq 'yt' : begin
471               IF (size(gphi))[0] EQ 1 then yy = gphi ELSE yy = reform(gphi[0, *])
472               xx = temps-tempsmin
473               z2d = transpose(z2d)
474               mask = transpose(mask)
475            end
476            type eq 'zt' : begin
477               yy =  gdep
478               xx = temps-tempsmin
479               z2d = transpose(z2d)
480               mask = transpose(mask)
481            end
482         endcase
483      end
484   endcase
485;--------------------------------------------------------------
486   if NOT keyword_set(overplot) THEN axe, type, tempsmin, tempsmax, _EXTRA = ex ELSE BEGIN
487      if type EQ 'xt' then BEGIN
488         !y.range=!y.range-tempsmin
489         !y.tickv=!y.tickv-tempsmin
490      ENDIF ELSE BEGIN
491         !x.range=!x.range-tempsmin
492         !x.tickv=!x.tickv-tempsmin
493      ENDELSE
494   ENDELSE
495;------------------------------------------------------------
496;------------------------------------------------------------
497; dessin
498;------------------------------------------------------------
499; 2d
500;------------------------------------------------------------
501   if (typdes eq '2d') then begin
502;--------------------------------------------------------------
503; choix des labels
504;-----------------------------------------------------------
505      if keyword_set(intervalle) AND NOT keyword_set(label) then label=1
506      if keyword_set(label) eq 0 then cas=0 else cas=label
507      label,cas,min,max,ncontour,level_z2d,NLEVEL=nlevel,INTERVALLE=intervalle, strictfill = strictfill
508;--------------------------------------------------------------
509; choix de style
510;-----------------------------------------------------------
511      if not keyword_set(style) then style=0
512      style,style,level_z2d,linestyle,thick
513      if keyword_set(inv) then couleur=reverse(couleur)
514;----------------------------------------------------------------------
515      nby = n_elements(yy)
516      nbx = n_elements(xx)
517      xx = xx#replicate(1, nby) ; on passe les axes en tableaux 2d
518      yy = replicate(1, nbx)#yy
519;
520      if keyword_set(nan) then begin
521         notanumber = where(finite(z2d, /nan) EQ 1)
522         z2d[notanumber] = max
523         case type of
524            'xt':masknan = replicate(1, nx, jpt)
525            'yt':masknan = replicate(1, ny, jpt)
526            'zt':masknan = replicate(1, nz, jpt)
527         endcase
528         masknan[notanumber] = 0
529      ENDIF ELSE masknan = 1
530      z2d = remplit(z2d,nite=2+keyword_set(nan), mask = mask*masknan, /basique, _extra=ex)
531      if NOT keyword_set(strictfill) then z2d = min > z2d <  max
532      if NOT keyword_set(usetri) then triangulation = -1 ELSE $
533       triangulation = triangule(mask*masknan,/regulier,coinmonte=coinmontemask,coindescend=coindescendmask)
534;
535;----------------------------------------------------------------------
536      pltbase,z2d, xx, yy, mask,xx, yy, level_z2d,couleur, contour = contour,/noerase $
537       , c_linestyle=linestyle,c_labels=1-(indgen(n_elements(level_z2d)) MOD 2) $
538       , trichamp = triangulation, trimsk = triangulation, overplot = overplot $
539       , c_thick=thick, performance = key_performance $
540       , coinmontemask=-1, coindescendmask=-1, masknan = masknan, _extra = ex
541;------------------------------------------------------------
542      if n_elements(contour) eq 4 then BEGIN ; c''est la 2eme fois que je passe ds pltt
543         contour = {mietma:[mi, ma], unit:varunit, inter:intervalle} ; je renvoie le min, le max et l''unite
544         return
545      endif
546;------------------------------------------------------------
547      if keyword_set(contour) then BEGIN
548         pourlegende = [1, 1, 1, 1]
549         oldattributs = saveatt()
550         oldcouleur = couleur
551         pltt,contour,type, contmin,contmax,CONTOUR=pourlegende, /noerase, USETRI = usetri $
552          ,INTERVALLE=contintervalle,LABEL=contlabel,STYLE=style, ENDPOINTS = endpoints $
553          ,NLEVEL=contnlevel,YSURX=ysurx, BOITE = boite, STRICTFILL = strictfill, _extra = ex
554         couleur = oldcouleur
555         restoreatt, oldattributs
556      endif
557;----------------------------------------------------------------------
558;----------------------------------------------------------------------
559      if keyword_set(overplot) then GOTO, fini
560;------------------------------------------------------------
561; Trace de la ligne de changement de date
562;------------------------------------------------------------
563      if (type eq 'xt') then $
564       plot, [180,180],[tempsmin,tempsmax],/noerase,color=c_cote
565;------------------------------------------------------------
566; legendes + affichage de celles-ci
567;------------------------------------------------------------
568      legende,mi,ma,type, CONTOUR = pourlegende, DIREC = direc, INTERVALLE = intervalle $
569       , ENDPOINTS = endpoints, _extra = ex
570;
571      plot,[0],[0],/noerase,color=c_cote, xstyle = 1+4*(keyword_set(endpoints) AND type EQ 'xt' AND lat1 NE lat2) $
572       , ystyle = 1+4*(keyword_set(endpoints) AND type EQ 'yt'), _extra = ex
573; ajout d'un axe ds le cas ou l'on utilise endpoints
574      if keyword_set(endpoints) then addaxe, endpoints, type, posfenetre, _EXTRA = ex
575;------------------------------------------------------------
576; barre de couleur
577;------------------------------------------------------------
578      couleur = couleur[0:ncontour-1-keyword_set(strictfill)]
579      barrecouleur, position=posbar,divisions=(ncontour-keyword_set(strictfill))/2,min=min $
580       , max=max,discret=couleur,_extra = ex
581;------------------------------------------------------------
582   endif
583;------------------------------------------------------------
584; 1d
585;------------------------------------------------------------
586trace1d:
587   if (typdes eq '1d') then begin
588      if (not keyword_set(col1d)) then col1d = 0
589      if keyword_set(sty1d) then BEGIN ;si on veut faire des barres
590         IF strlowcase(strtrim(sty1d)) EQ 'bar' then begin
591            !y.range = [!y.range[0]-(!y.range[1]-!y.range[0])*.05,!y.range[1]]
592            bar_plot, yy, background = (!d.n_colors-1) < 255,  $
593             baselines = replicate(!y.range[0], n_elements(yy)), barnames = ['', ''], $
594             colors    = replicate(col1d      , n_elements(yy)), /outline
595            plot, [0], [0],/noerase,color=c_cote, _extra = ex
596            GOTO, fini
597         ENDIF
598      ENDIF
599      if NOT keyword_set(ov1d) then BEGIN
600         !y.range=[min-abs(max-min)/50.,max+abs(max-min)/50.]
601         legende,mi,ma,type, DIREC = direc, _extra = ex
602;
603         if keyword_set(exchange_xy) then begin
604            rien = !x
605            !x = !y
606            !y = rien
607            rien = xx
608            xx = yy
609            yy = rien
610         endif
611         plot,xx,yy,color=col1d,linestyle=sty1d,thick=2, title = '', subtitle = '', _extra = ex
612         if n_elements(ex) NE 0 then BEGIN
613; pour avoir un cadre de la couleur c_cote
614            if (where(tag_names(ex) EQ 'COLOR'))[0] NE -1 then ex.COLOR = c_cote
615         ENDIF
616         if keyword_set(exchange_xy) then $
617          plot, [0, 0],!y.range ,/noerase,color=c_cote, xstyle = 1, ystyle = 1, _extra = ex $
618         ELSE plot, !x.range, [0, 0],/noerase,color=c_cote, xstyle = 1, ystyle = 1, _extra = ex
619      ENDIF ELSE oplot,xx,yy,color=col1d,linestyle=sty1d,thick=2, _extra = ex
620   endif
621fini:
622;------------------------------------------------------------
623; on remet l''axe du temps en jours julien IDL et non pas en jours
624; juliens comptes a partir tempsmin
625;------------------------------------------------------------
626   if type EQ 'xt' then BEGIN
627      !y.range=!y.range+tempsmin
628      !y.tickv=!y.tickv+tempsmin
629   ENDIF ELSE BEGIN
630      !x.range=!x.range+tempsmin
631      !x.tickv=!x.tickv+tempsmin
632   ENDELSE
633; on fait un faut plot pour que ces valeurs soient prises en
634; consideration
635   plot,[0], [0], /noerase,xstyle=5, ystyle = 5, title = '', subtitle = '', ytitle = '', xtitle = ''
636;------------------------------------------------------------
637;------------------------------------------------------------
638; 3eme partie: impression eventuelle
639;------------------------------------------------------------
640;------------------------------------------------------------
641   terminedessin, _extra = ex
642   if keyword_set(oldboite) then domdef, oldboite,GRILLE=[vargrid, 'T']
643;------------------------------------------------------------
644   if n_elements(key_performance) NE 0 then $
645    IF key_performance EQ 1 THEN print, 'temps pltt', systime(1)-tempsun
646;------------------------------------------------------------
647;------------------------------------------------------------
648;------------------------------------------------------------
649   return
650end
651
652
Note: See TracBrowser for help on using the repository browser.