source: trunk/SRC/ToBeReviewed/PLOTS/DESSINE/pltz.pro @ 134

Last change on this file since 134 was 134, checked in by navarro, 18 years ago

change *.pro file properties (del eof-style, del executable, set keywords Id

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 24.6 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:
6;       PLTZ
7;
8; PURPOSE:
9;       trace des graphes verticaux
10;
11; CATEGORY:
12;       Graphics
13;
14; CALLING SEQUENCE:
15;       pltz, champ [,min[, max]]
16;
17; INPUTS:
18;       champ: le champ dont on veut faire la coupe verticale champ
19;       peut etre de 2 types:
20;         1) un tableau 2d ou 3d.
21;         Si le champ est 2d undiquer avec le mot cle boxzoom les
22;         delimitations geographiques de la boxzoom. Si le chyamp est
23;         3d, on extrait la section et on moyenne eventuellement avant
24;         de faire le plot
25;         2) une structure repondant aux critaire specifies par
26;         litchamp.pro. cf. IDL> xhelp,'litchamp'. le tableau contenu
27;         ds la structure doit etre 2 ou 3d cf cas 1) si dessus
28;
29; ces arguments ne sont pas obligatoires:
30
31;       MAX: valeur maximum que l'on veut prendre en compte dans le trace
32; des contours. Par defaut on prend le max de tab1 (sur les pts mer)
33;
34;       MIN: valeur minimum que l'on veut prendre en compte dans le trace
35; des contours. Par defaut on prend le min de tab1 (sur les pts mer)
36;
37; KEYWORD PARAMETERS:
38;
39;       BOXZOOM:vecteur indiquant la zone geographique sur laquelle doit etre
40; faite la coupe. Si BOXZOOM a :
41; 1 element : l''extraction est faite sur [lon1, lon2, lat1, lat2, 0.,boxzoom[0]]
42; 2 elements: l''extraction est faite sur [lon1, lon2, lat1, lat2, boxzoom[0],boxzoom[1]]
43; 4 elements: l''extraction est faite sur [Boxzoom, 0, 200]
44; 5 elements: l''extraction est faite sur [Boxzoom[0:3], 0, Boxzoom[4]]
45; 6 elements: l''extraction est faite sur Boxzoom
46;
47; Ou lon1, lon2,lat1,lat2 sont les variables globales
48; definies lors du dernier domdef!
49;
50;      CB_TITLE: le titre de la colorbar
51;
52;      CB_SUBTITLE: le soustitre de la colorbar
53;
54;      CB_CHARSIZE: The character size of the color bar annotations
55;
56;       CONTINTERVALLE: lorsque CONTOUR est active, valeur d'un
57; intervalle entre deux isolignes traces par un trait. Il peut ainsi
58; etre different de celui specifie par INTERVALLE
59; qui, cas ce cas, ne controle que les isolignes coloriees en
60; couleurs. Si aucun min n''est specifie, on choisit un contour min qui va
61; bien avec l''intervalle specifie!. Si ce mot cle n''est pas
62; specifie, on trace 20 isolignes du min au max.
63;
64;       CONTLABEL: un entier n. lorsque CONTOUR est active, si n
65; different de 0, choisit le type de label correspondant aux cas n
66; pour les isolignes tracees par un trait. Pour specifier le type de
67; label du contour en couleur, utiliser LABEL
68;
69;       CONTMAX: lorsque CONTOUR est active, valeur maximum que l''on
70; veut prendre en compte dans le trace des isolignes traces par un
71; trait. Par defaut on prend le max (sur les pts mer)
72; du tableau passe ds le mot cle CONTOUR.
73;
74;        COAST_COLOR: the color of the coastline.
75;                     defaut value is 0 => black
76;
77;        COAST_THICK: the thickness of the coastline.
78;                     defaut value is 1
79;
80;        /CONT_NOFILL: activer pour ne pas remplir les points masques
81;        pour les laisser en transparent!
82;        Rq: on trace qd meme le contour du mask
83;
84;        CONT_COLOR: the color of the continent. defaut value is
85;        (!d.n_colors - 1) < 255 => white
86;
87;       CONTMIN: lorsque CONTOUR est active, valeur minimum que l''on
88; veut prendre en compte dans le trace des isolignes traces par un
89; trait. Par defaut on prend le max (sur les pts mer)
90; du tableau passe ds le mot cle CONTOUR.
91;
92;       CONTNLEVEL: lorsque CONTOUR est active, nombre de contours
93; trace par un trait a dessiner (actif si
94; CONTLABEL=0) par defaut =20.
95;
96;       CONTOUR: si on veut tracer les contours d'un champ different que celui
97; que l''on dessin en couleur (par ex E-P en couleur et QSR en
98; contours). Doit etre un champ reponadnt aux meme caracteristiques
99; que l''argument numero 1 de pltz
100;
101;       ENDPOINTS: mot clef specifiant que l'on veut faire une coupe
102;       verticale en diagonale. les coordonnees des extremites de
103;       celle-ci sont alors definies les 4 elements du vecteur
104;       ENDPOINTS: [x1,y1,x2,y2] qui sont les coordonnees
105;
106;       INTERVALLE: valeur d''un intervalle entre deux isolignes. Si
107; aucun min n''est specifie, on choisit un contour min qui va bien
108; avec l'intervalle specifie!. Si ce mot cle n''est pas specifie, on
109; trace 20 isolignes du min au max. Rq: Qd CONTOUR est active
110; INTERVALLE ne specifie que intervalle entre 2 isolignes coloriees en
111; couleur. Pour specifier l''intervalle entre 2 isolignes traces par un trait
112; utiliser CONTINTERVALLE.
113;
114;       /INV: inverse le vecteur couleur utilisee pour colorier le graphe
115;             (sans toucher au noir, au blanc et a la palette utilisee)
116;
117;       ZRATIO: lorsque le dessin presente une partie zoomee, rapport de
118; taille entre la partie zommee, hz (hauteur zoom), et le dessin entier, ht
119; (hauteur total). Par defaut =2./3
120;
121;       LABEL: un entier n. si n different de 0, choisit le type de
122; label correspondant aux cas n. cf label.pro
123; Rq: Qd CONTOUR est active, ne specifie le type de label que pour les
124; isolignes coloriees en couleur. Pour celles tracees par un trait
125; utiliser CONTLABEL.
126;
127;       /LANDSCAPE: oblige la feuille ou la fenetre a etre en position
128;       "allongee"
129;
130;       LCT: entier designant le numero de la palette de couleur que
131;       l''on veut utiliser pour le plot.
132;       
133;       MAXIN: permet de specifier la valeur maximum que l''on veut
134;       prendre en compte dans le trace des contours a l''aide d''un
135;       mot cle plutot que par l''argument max. Si l''argument et le
136;       mot cle sont specifies en meme temps, c''est la valeur
137;       specifiee par le mot cle qui est retenue.
138;
139;       MININ: permet de specifier la valeur minimum que l''on veut
140;       prendre en compte dans le trace des contours a l''aide d''un
141;       mot cle plutot que par l''argument min. Si l''argument et le
142;       mot cle sont specifies en meme temps, c''est la valeur
143;       specifiee par le mot cle qui est retenue.
144;       
145;       NLEVEL: nombre de contours a dessiner. par defaut =20. actif si
146; LABEL=0 ou n'est pas specifie.
147;
148;       /NOCOLORBAR: activer si on ne veut pas de colorbar
149;
150;       /NOCONTOUR: activer si on ne veut pas de contour mais juste
151;       les couleurs
152;
153;       /NOFILL: activer si on veut juste les contours en noir et
154;       blanc sur fond blanc
155;
156;       /NOERASE: activer pour faire un dessin a l''ecran sans creer
157;       une nouvelle fenetre
158;
159;       /NOTRI: pour forcer a ne pas utiliser de triangulation.
160;
161;       OVERPLOT: pour faire un plt par dessus un autre. Rq:
162;       contrairemnet a l''utilisation de CONTOUR,
163;       l''utilisation de ce mot clef ne modifie pas la legende ou/et
164;       la barre de couleur.
165;
166;       PETITDESSIN: vecteur de 3 ou 4 elements, applique pour faire un
167; dessin sur une petite portion de feuille ou d''ecran. il delimite
168; la zone ds laquelle va etre fait le dessin
169; si il a 4 elements:
170;       il est alors constitute des coordonnees -exprime en cm reperes par
171;       rapport au coin en bas a gauche de la feuille ou de la fenetre
172;       (en portrait comme en landscape)- du coin en bas a
173;       gauche et du coin en haut a droite  de la zone de dessin.
174; si il a 3 elements:
175;       Ds ce cas, on divise la fenetre ou l''ecran en PETITDESSIN[0]
176;       colonnes, en PETITDESSIN[1] lignes le dessin se faisant ds la
177;       case numero PETITDESSIN[2].La numerotation commencant en haut
178;       a gauche par le numero 1 et suivant apres dans le sens de
179;       l''ecriture.
180; Par defaut on fait un dessin occupant la plus grande place possible
181; tout en concervant le rapport d''aspect (sauf qd REMPLI est active)
182;
183;       /PORTRAIT: oblige la feuille ou la fenetre a etre en position
184;       "debout"
185;
186;       /POST: faire une sortie postscript. Ne marche que si on fait
187;       un seul dessin sur la feuille. Si on fait plusieurs dessins,
188;       utiliser @ps ou plein2dessins
189;
190;       /REMPLI:oblige le dessin a occuper l'espace maximum definit
191;       par petitdessin
192;
193;       /SIN: activer ce mot cle si l''on veut que l'' axe des x soit
194;       trace en sinus de la latitude qd on fait une coupe 'yz'
195;
196;       /STRICTFILL: activer ce mot clef pour que le remplissage des
197;       contours ce fasse precisement entre le min et le max specifie
198;       en laissant en banc les valeurs inferieurs au min specifie et
199;       superieurs au max specifie.
200;
201;       STYLE: style de tracer a adopter pour dessiner les isolignes par
202; defaut style=0. cf style.pro
203;
204;       /TRANS: fait un postscript (active /post automatiquement) et l'imprime
205; -si on le desire- sur un transparant
206;
207;        UNLABSUR: entier n. specifant qu''on ne labelle qu''un
208;        contour sur n. Par defaut unlabsur=2
209;
210;       /UNSUR2: si on veut tracer un countour sur deux. par  defaut trace
211; tous les contours
212;
213;       WINDOW: nimero de la fenetre ou l'on veut faire le graphe (permet
214; d'ouvrir plusieurs fenetres). par defaut on ouvre 'IDL0'
215;
216;       /WDEPTH: to specify that the field is at W depth instad of T
217;         depth (automatically activated if vargrid eq 'W')
218;
219;       /XZ: force a faire une coupe xz
220;
221;       /YZ: force a faire une coupe yz
222;
223;       YXASPECT: rapport d'echelle entre y et x (par ex: =1 pour un repere
224; presque orthonorme, =2 si l'axe des y est environ deux fois plus dilate
225; que celui des x). Par defaut on adapte pour occupe une grande partie de
226; la feuille en sortie postScript ou pour cree une fenetre pas trop etiree
227;
228;         /WDEPTH: to specify that the field is at W depth instad of T
229;         depth (automatically activated if vargrid eq 'W')
230;
231;       ZOOM: profondeur jusqu'a laquelle on fait un zoom. par defaut 200m ou
232; la profondeur maximale si elle est inf a 200
233;
234;       /ZEROMIDDLE: fo force the middle of the colorbar to be equal
235;       to 0 (force max=max(abs([min,max])) and min=-max)
236;
237; OUTPUTS:
238;
239; COMMON BLOCKS:
240;       common.pro     
241;
242; SIDE EFFECTS:
243;
244; RESTRICTIONS:
245;
246; EXAMPLE:
247;
248; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr)
249;                       7/1999
250;                       Sebastien Masson 08/02/2000 checkfield and
251;                       notri keyword.
252;-
253;------------------------------------------------------------
254;------------------------------------------------------------
255;------------------------------------------------------------
256pro pltz, tab, giventype, givenmin, givenmax, BOXZOOM = boxzoom, CONTOUR = contour $
257          , ENDPOINTS = endpoints, INTERVALLE = intervalle, INV = inv, ZRATIO = zratio $
258          , CONTINTERVALLE = contintervalle, LABEL = label, CONTLABEL = contlabel $
259          , STYLE = style, CONTMAX = contmax, SIN = sin, TYPEIN = typein $
260          , CONTMIN = contmin, NLEVEL = nlevel, CONTNLEVEL = contnlevel $
261          , NOTRI = notri, USETRI = usetri, FILLXDIR = fillxdir $
262          , ZOOM = zoom, XZ = xz, YZ = yz, MININ = minin, MAXIN = maxin $
263          , STRICTFILL = strictfill, OVERPLOT = overplot, MASKFILL = maskfill $
264          , WDEPTH = wdepth, REALSECTION = realsection $
265          , _EXTRA = ex
266;---------------------------------------------------------
267; include common
268;
269  compile_opt idl2, strictarrsubs
270;
271@cm_4mesh
272@cm_4data
273@cm_4ps
274  IF NOT keyword_set(key_forgetold) THEN BEGIN
275@updatenew
276@updatekwd
277  ENDIF
278;--------------------------------------------------------------
279  tempsun = systime(1)          ; pour key_performance
280;------------------------------------------------------------
281;--------------------------------------------------------------
282; 1ere partie: initialisation et petits calculs...
283;--------------------------------------------------------------
284;on ne reinitialise pas qd on rapelle pltz en boucle pour utiliser contour
285  if n_elements(contour) ne 4 AND NOT keyword_set(overplot) then reinitplt
286;
287  if n_elements(contour) ne 4 THEN saveboxparam, 'boxparam4pltz.dat'
288;--------------------------------------------------------------
289; lecture du champ
290;--------------------------------------------------------------
291  if n_elements(giventype) NE 0 then type = giventype
292  if n_elements(givenmin) NE 0 then min = givenmin
293  if n_elements(givenmax) NE 0 then max = givenmax
294  if n_elements(minin) NE 0 then min = minin
295  if n_elements(maxin) NE 0 then max = maxin
296  if n_elements(realsection) EQ 0 then realsection = 1
297  IF n_elements(usetri) EQ 0 THEN BEGIN
298    IF n_elements(notri) NE 0 THEN usetri = 2-notri ELSE usetri = 1
299  ENDIF
300; no need of triangulation
301  IF usetri EQ 1 AND keyword_set(realsection) THEN usetri = 0
302; did we specify the type ?
303  if keyword_set(typein) then BEGIN
304    if size(type, /type) NE 7 AND size(type, /type) NE 0 then begin
305      if n_elements(min) NE 0 then max = min
306      min = type
307    endif
308    type = typein
309  ENDIF
310;
311  checktypeminmax, 'pltz', TYPE = type, MIN = min, MAX = max $
312    , XZ = xz, YZ = yz, ENDPOINTS = endpoints, _extra = ex
313;
314  if keyword_set(endpoints) then begin
315    section, tab, z2d, glam, gphi, ENDPOINTS = endpoints, TYPE = type $
316    , BOXZOOM = boxzoom, DIREC = direc, WDEPTH = wdepth, _extra = ex
317    if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN
318      restoreboxparam, 'boxparam4pltz.dat'
319      return
320    ENDIF
321    nx = n_elements(glam)
322    ny = nx
323    if strupcase(vargrid) EQ 'W' then begin
324      gdep = gdepw[firstzw:lastzw]
325      nz = nzw
326    ENDIF ELSE BEGIN
327      gdep = gdept[firstzt:lastzt]
328      nz = nzt
329    ENDELSE
330    mask = z2d LE valmask/10.
331  ENDIF ELSE BEGIN
332    z2d = checkfield(tab, 'pltz', TYPE = type, BOXZOOM = boxzoom $
333                     , DIREC = direc, WDEPTH = wdepth, _extra = ex)
334    if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN
335      restoreboxparam, 'boxparam4pltz.dat'
336      return
337    ENDIF
338    IF realsection EQ 1 THEN grille, mask, glam, gphi, gdep, nx, ny, nz, ifpltz = type, WDEPTH = wdepth $
339    ELSE grille, mask, glam, gphi, gdep, nx, ny, nz, WDEPTH = wdepth
340  ENDELSE
341; stop
342;---------------------------------------------------------------
343  profmax = !y.range[0]
344  profmin = !y.range[1]
345  if not keyword_set(zoom) then zoom = 200
346  zoom = zoom[0]
347  IF zoom LT profmin THEN zoom = profmax
348  if zoom GE vert2 then zoom = profmax
349; construction of the mask and of the axis
350  axis4pltz, type, mask, glam, gphi, gdep, XXAXIS = xxaxis, ZZAXIS = zzaxis, SIN = sin, ZRATIO = zratio, ZOOM = zoom, PROFMAX = profmax, PROFMIN = profmin, _extra = ex
351; to draw from bottom to top (avoid using cell_fill)
352  z2d = reverse(z2d, 2)
353;-----------------------------------------------------------------------------
354;   determination du mi:min et du ma:max de tab1 ainsi que de max: max et
355;   min: min pour le dessin.
356;-----------------------------------------------------------------------------
357  nan = total(finite(z2d, /nan)) < 1
358; faudra-t-il faire un autoscale ???
359  autoscale = testvar(var = min) EQ testvar(var = max) AND NOT keyword_set(intervalle)
360  determineminmax, z2d, mask, mi, ma, MININ = min, MAXIN = max, nan = nan, INTERVALLE = intervalle, _extra = ex
361  if z2d[0] EQ -1 THEN GOTO, sortie
362; on fait un autoscale si besoin
363  if autoscale then autoscale, min, max, intervalle
364;--------------------------------------------------------------
365;--------------------------------------------------------------
366; 2eme partie: dessin
367;--------------------------------------------------------------
368;--------------------------------------------------------------
369  if n_elements(contour) NE 4 AND NOT keyword_set(overplot) THEN $
370    placedessin, 'pltz', posfenetre, posbar, contour = contour, endpoints = endpoints $
371    , direc = direc, _extra = ex
372;------------------------------------------------------------
373;--------------------------------------------------------------
374; choix des labels
375;-----------------------------------------------------------
376  if keyword_set(intervalle) AND NOT keyword_set(label) then label = 1
377  if keyword_set(label) eq 0 then cas = 0 else cas = label
378  label, cas, min, max, ncontour, level_z2d, colnumb, NLEVEL = nlevel $
379         , INTERVALLE = intervalle, strictfill = strictfill
380;--------------------------------------------------------------
381; choix de style
382;-----------------------------------------------------------
383  if not keyword_set(style) then style = 0
384  style, style, level_z2d, linestyle, thick
385  if keyword_set(inv) then colnumb = reverse(colnumb)
386;-----------------------------------------------------------
387;   definition des axes
388;----------------------------------------------------------
389  if NOT keyword_set(overplot) THEN axe, type, SIN = sin, _EXTRA = ex
390  !y.range = [-1, 0]
391;--------------------------------------------------------------
392; extrapolation des donnees sur les terres et seuillage
393;--------------------------------------------------------------
394; define masknan
395  if keyword_set(nan) then BEGIN
396    masknan = finite(z2d)
397    z2d[where(masknan EQ 0)] = max
398  ENDIF ELSE masknan = 1
399  IF n_elements(fillxdir) EQ 0  THEN fillxdir = 1
400  IF keyword_set(fillxdir) THEN BEGIN
401; filling the mask values only in the x direction.
402    z2d = remplit(z2d, nite = nx*(1-(n_elements(maskfill) NE 0)) $
403                  , mask = mask*masknan, /basique $
404                  , /fillxdir, _extra = ex)
405; if some lines contains no data (the bottom line for ex) it must be
406; also filled with 8 neighbourg method
407    IF (where(total(mask*masknan, 1) EQ 0))[0] NE -1 THEN $
408      z2d = remplit(z2d, nite = 1-(n_elements(maskfill) NE 0) $
409                    , mask = z2d LT valmask/10, /basique, _extra = ex)
410  ENDIF ELSE BEGIN
411; filling the mask values with 8 neighbourg
412    z2d = remplit(z2d, nite = (1+(vargrid NE 'T')+keyword_set(nan)) $
413                  *(1-(n_elements(maskfill) NE 0)), mask = mask*masknan $
414                  , /basique, _extra = ex)
415  ENDELSE
416  if keyword_set(strictfill) EQ 0 AND n_elements(maskfill) EQ 0 $
417    then z2d = min > z2d <  max
418  if n_elements(maskfill) NE 0 then BEGIN
419    z2d = z2d*mask*masknan
420    if maskfill NE 0 then z2d = temporary(z2d) + maskfill*(1b-mask*masknan)
421  ENDIF
422;----------------------------------------------------------
423; check the mask and the triangulation according to the grid type and
424; nan values. find the coordinates of the mask
425;----------------------------------------------------------
426;   if (where(mask EQ 0))[0] EQ -1 AND NOT keyword_set(nan) then notri = 1
427;   if keyword_set(notri) then trifield = -1 $
428;   ELSE trifield = triangule(mask,/basic)
429  if (usetri GE 1 AND (vargrid EQ 'T' OR vargrid EQ 'W')) $
430    OR (usetri EQ 2 AND (vargrid NE 'T' AND vargrid NE 'W')) THEN $
431    trifield = triangule(mask, /basic)
432;
433  IF NOT keyword_set(endpoints)  THEN BEGIN
434    if keyword_set(nan) then trinan = triangule(masknan, /basic, coinmonte = coinmontenan, coindescend = coindescendnan)
435    decoupeterre, mask, glammsk, gphimsk, gdepmsk, type = type, WDEPTH = wdepth, REALSECTION = realsection
436    axis4pltz, type, mask, glammsk, gphimsk, gdepmsk, XXAXIS = xmask, ZZAXIS = zmask, SIN = sin, ZRATIO = zratio, ZOOM = zoom, PROFMAX = profmax, PROFMIN = profmin, _extra = ex
437  ENDIF ELSE BEGIN
438    xmask = xxaxis
439    zmask = zzaxis
440  ENDELSE
441;
442  if (usetri GE 1 AND (vargrid NE 'T' AND vargrid NE 'W')) THEN BEGIN
443    IF keyword_set(realsection) THEN trimsk = triangule(mask, /basic) $
444    ELSE trimsk = triangule(mask, /basic, coinmonte = coinmontemask $
445                            , coindescend = coindescendmask)
446  ENDIF     
447;------------------------------------------------------------
448; dessin en lui meme
449;------------------------------------------------------------
450  pltbase, z2d, xxaxis, zzaxis, mask, xmask, zmask $
451    , level_z2d, colnumb, overplot = overplot $
452    , contour = contour, trichamp = trifield, trimsk = trimsk  $
453    , c_linestyle = linestyle $
454    , c_labels = 1-(indgen(n_elements(level_z2d)) MOD 2) $
455    , c_thick = thick, unsur2 = unsur2 $
456    , masknan = masknan, trinan = trinan $
457    , coinmontenan = coinmontenan, coindescendnan = coindescendnan $
458    , coinmontemask = coinmontemask, coindescendmask = coindescendmask $
459    , REALSECTION = realsection, USETRI = usetri, _extra = ex
460;------------------------------------------------------------
461; rappelle de pltz en boucle qd contour est active
462;------------------------------------------------------------
463  if n_elements(contour) eq 4 then BEGIN ; c''est la 2eme fois que je passe ds pltt
464    contour = {mietma:[mi, ma], unit:varunit, inter:intervalle} ; je renvoie le min, le max et l''unite
465    return
466  endif
467  if keyword_set(contour) THEN BEGIN
468    pourlegende = [1, 1, 1, 1]
469    oldattributs = saveatt()
470    oldcolnumb = colnumb
471    pltz, contour, contmin, contmax, CONTOUR = pourlegende, ZRATIO = zratio $
472      , INTERVALLE = contintervalle, LABEL = contlabel, STYLE = style, /noerase  $
473      , NLEVEL = contnlevel, ZOOM = zoom, BOXZOOM = boxzoom, ENDPOINTS = endpoints $
474      , STRICTFILL = strictfill, REALSECTION = realsection, MASKFILL = maskfill $
475      , USETRI = usetri, WDEPTH = wdepth, _extra = ex
476    restoreatt, oldattributs
477    colnumb = oldcolnumb
478  ENDIF
479;------------------------------------------------------------
480;------------------------------------------------------------
481; 3eme partie: dessin du cadre, legendes, colorbar...
482;------------------------------------------------------------
483  if keyword_set(overplot) then BEGIN
484    !y.range =  [zoom, profmin] ; on repasse en coordonees physiques!
485    plot, [0], [0], /nodata, /noerase, title = '', subtitle = '', xstyle = 5, ystyle = 5
486    GOTO, fini
487  endif
488;------------------------------------------------------------
489; legendes + affichage de celles-ci
490;------------------------------------------------------------
491  legende, mi, ma, type, CONTOUR = pourlegende, INTERVALLE = intervalle, DIREC = direc, endpoints = endpoints, _EXTRA = ex
492  if type eq 'yz' then xaxe = 'lataxe' else xaxe = 'lonaxe'
493  if keyword_set(sin) OR NOT key_onearth then xaxe = ''
494; cadre applique par defaut
495  plot, [xxaxis[0], xxaxis[n_elements(xxaxis)-1]], [-zratio, -zratio], /noerase $
496    , xstyle = 1+4*(keyword_set(endpoints) AND ((type EQ 'xz' AND lat1 NE lat2) OR (type EQ 'yz' AND lon1 NE lon2))) $
497    , xtickformat = xaxe, _extra = ex
498; ajout d'un axe ds le cas ou l'on utilise endpoints
499  if keyword_set(endpoints) then addaxe, endpoints, type, posfenetre, _EXTRA = ex
500;------------------------------------------------------------
501; axe y en 1 ou 2 parties
502;------------------------------------------------------------
503  if n_elements(ex) NE 0 then BEGIN
504; pour ne plus mettre de titre
505    if (where(tag_names(ex) EQ 'TITLE'))[0] NE -1 then ex.TITLE = ' '
506; pour ne plus mettre de sous titre
507    if (where(tag_names(ex) EQ 'SUBTITLE'))[0] NE -1 then ex.SUBTITLE = ' '
508; pour n''avoir q''un ytitle
509    if (where(tag_names(ex) EQ 'YTITLE'))[0] NE -1 then BEGIN
510      ytitle = ex.YTITLE
511      ex.YTITLE = ' '
512    endif
513  ENDIF
514  htotal = posfenetre[3]-posfenetre[1]
515  hzoom = 1.*zratio*htotal
516  if zoom LT profmax then $
517    plot, [0], [0], /nodata, /noerase, ystyle = 1, yrange = [profmax, zoom+0.001] $
518    , position = posfenetre+[0, 0, 0, -hzoom], _extra = ex, title = '', subtitle = '', ytitle = ''
519;
520  !y.range =  [zoom, profmin]   ; on repasse en coordonees physiques!
521  plot, [0], [0], /nodata, /noerase, ystyle = 1, _extra = ex $
522    , title = '', subtitle = '', ytitle = '', position = posfenetre+[0, htotal-hzoom, 0, 0]
523;------------------------------------------------------------
524; pour ecrire le ytitle...
525;------------------------------------------------------------
526  if !d.name EQ 'PS' then $
527    xs = (max(page_size, min = mi)*(1-key_portrait) + mi*key_portrait)*!d.x_px_cm $
528  ELSE xs = !d.x_size
529  if n_elements(ytitle) NE 0 then !y.title = ytitle
530  charsize = chkstru(ex, 'ycharsize', /extract)
531  if charsize EQ -1 then charsize = !p.charsize
532  IF chkstru(ex, 'charsize') THEN ex.charsize = charsize
533  if chkstru(ex, 'ytitle', /extract) NE '' then $
534    decalage = string(format = '(e10.3)', profmax)
535  decalage = float(strmid(decalage, strpos(decalage, 'e')+1))
536  posy = posfenetre[1]+1.*htotal/2
537  posx = posfenetre[0]-(decalage+3)*!d.x_ch_size*charsize/xs
538  xyouts, posx, posy, !y.title, /normal, orientation = 90, color = 0, ALIGNMENT = .5, charsize = charsize, _extra = ex
539
540;------------------------------------------------------------
541; barre de couleur
542;------------------------------------------------------------
543  colnumb = colnumb[0:ncontour-1-keyword_set(strictfill)]
544  barrecouleur, colnumb, min,  max, (ncontour-keyword_set(strictfill))/2 $
545                , position = posbar, _extra = ex
546;------------------------------------------------------------
547;------------------------------------------------------------
548; 4eme partie: impression eventuelle
549;------------------------------------------------------------
550;------------------------------------------------------------
551fini:
552  terminedessin, _extra = ex
553;------------------------------------------------------------
554;------------------------------------------------------------
555;------------------------------------------------------------
556;------------------------------------------------------------
557sortie:
558  restoreboxparam, 'boxparam4pltz.dat'
559;
560  if keyword_set(key_performance) NE 0 THEN print, 'temps pltz', systime(1)-tempsun
561  return
562end
563
564
565
Note: See TracBrowser for help on using the repository browser.