cbarn.gs

Esther Romero Olivares eromeroo at INM.ES
Mon Oct 26 04:27:43 EDT 2009


Thank you very much!

I have tried to place "set vpage off" many times correctly, but it never
worked!

Thanks again.

Esther.


El vie, 23-10-2009 a las 17:54, Diane Stokes escribió:
> Esther,
>
> You can make a new version of cbarn.gs that includes:
>    'set vpage off'
> after the shading info is stored, but before the plot size is determined.
>
> I'm attaching a version I frequently use.  It includes extra optional
> arguments to: reset the virtual page (what you want), modify the label
> thickness, and print the values diagonally (useful for horizontal bars
> with many values).
>
>    I hope this helps.
>       Diane
>
>
>
> Esther Romero Olivares wrote:
> > Thanks!
> >
> > But if I have used the "set vpage" command it will plot the legend
> > inside the virtual page defined, even if I don't specified any
> > parameter.
> >
> > If I use after the plot "set vpage off" to return to the default state
> > where the real page equals the virtual one it says that does not have
> > any shading information.
> >
> > I would like to have many plots but just one legend in the bottom of the
> > page...
> >
> > Thanks again!
> >
> > Esther.
> >
> > El jue, 22-10-2009 a las 14:11, eliav schmulewitz escribió:
> >> Esther
> >> sure you can
> >> if you open the cbarn script that is in the same file as your grads
> >> probably in a file called scripts
> >> it explains as folows:
> >> "run cbarn sf vert xmid ymid
> >> *
> >> *    sf   - scale the whole bar 1.0 = original 0.5 half the size, etc.
> >> *    vert - 0 FORCES a horizontal bar = 1 a vertical bar
> >> *    xmid - the x position on the virtual page the center the bar
> >> *    ymid - the x position on the virtual page the center the bar
> >> *
> >> *    if vert,xmid,ymid are not specified, they are selected
> >> *    as in the original algorithm"
> >> good luck
> >> eliav
> >>
>
> ______________________________________________________________________
> *
> *  Script to plot a colorbar
> *
> *  The script will assume a colorbar is wanted even if there is
> *  not room -- it will plot on the side or the bottom if there is
> *  room in either place, otherwise it will plot along the bottom and
> *  overlay labels there if any.  This can be dealt with via
> *  the 'set parea' command.  In version 2 the default parea will
> *  be changed, but we want to guarantee upward compatibility in
> *  sub-releases.
> *
> *
> *       modifications by mike fiorino 940614
> *       rvp added by diane stokes 20040729
> *
> *       - the extreme colors are plotted as triangles
> *       - the colors are boxed in white
> *       - input arguments in during a run execution:
> *
> *       run cbarn sf vert xmid ymid rvp
> *
> *       sf   - scale the whole bar 1.0 = original 0.5 half the size, etc.
> *       vert - 0 FORCES a horizontal bar = 1 a vertical bar
> *       xmid - the x position on the virtual page the center the bar
> *       ymid - the x position on the virtual page the center the bar
> *       rvp  - 1 resets virtual page (one colorbar for several plots)
> *       thk  - thickness of lines and font (default=5)
> *       diag - 1 draws labels diagaonally (useful for bars with many levels)
> *
> *       if vert,xmid,ymid are not specified, they are selected
> *       as in the original algorithm
> *
>
> function colorbar (args)
>
> sf=subwrd(args,1)
> vert=subwrd(args,2)
> xmid=subwrd(args,3)
> ymid=subwrd(args,4)
> rvp=subwrd(args,5)
> thk=subwrd(args,6)
> diag=subwrd(args,7)
>
> if(sf=''|sf="''");sf=1.0;endif
> if(thk=''|thk="''");thk=5;endif
>
> *
> *  Check shading information
> *
>   'query shades'
>   shdinfo = result
>   if (subwrd(shdinfo,1)='None')
>     say 'Cannot plot color bar: No shading information'
>     return
>   endif
>
> *
> * Check if reset of virtual page is desired
> *
>     if(rvp = 1)
>       say 'Colorbar based on colors from last plot drawn'
>       'set vpage off'
>     endif
> *
> *  Get plot size info
> *
>   'query gxinfo'
>   rec2 = sublin(result,2)
>   rec3 = sublin(result,3)
>   rec4 = sublin(result,4)
>   xsiz = subwrd(rec2,4)
>   ysiz = subwrd(rec2,6)
>   ylo = subwrd(rec4,4)
>   xhi = subwrd(rec3,6)
>   xd = xsiz - xhi
>
>   ylolim=0.6*sf
>   xdlim1=1.0*sf
>   xdlim2=1.5*sf
>   barsf=0.8*sf
>   yoffset=0.2*sf
>
> *
> *  Decide if horizontal or vertical color bar
> *  and set up constants.
> *
>   if (ylo<ylolim & xd<xdlim1)
>     say "Not enough room in plot for a colorbar"
>     return
>   endif
>   cnum = subwrd(shdinfo,5)
> *
> *       logic for setting the bar orientation with user overides
> *
>   if (ylo<ylolim | xd>xdlim1)
>     vchk = 1
>     if(vert = 0) ; vchk = 0 ; endif
>   else
>     vchk = 0
>     if(vert = 1) ; vchk = 1 ; endif
>   endif
> *
> *       vertical bar
> *
>
>   if (vchk = 1 )
>
>     if(xmid=''|xmid="''") ; xmid = xhi+xd/2 ; endif
>     xwid = 0.2*sf
>     ywid = 0.5*sf
>
>     xl = xmid-xwid/2
>     xr = xl + xwid
>     if (ywid*cnum > ysiz*barsf)
>       ywid = ysiz*barsf/cnum
>     endif
>     if(ymid = '' | xmid = "''" ) ; ymid = ysiz/2 ; endif
>     yb = ymid - ywid*cnum/2
>     if(diag != 1)
>       rot=0
>       stroff=0.05*sf
>       strxsiz=0.12*sf
>       strysiz=0.13*sf
>     else
>       rot=45
>       stroff=0.06*sf
>       strxsiz=0.11*sf
>       strysiz=0.12*sf
>     endif
>     'set string 1 l 'thk' 'rot
>     vert = 1
>
>   else
>
> *
> *       horizontal bar
> *
>
>     ywid = 0.4
>     xwid = 0.8
>
>     if(ymid='' | ymid="''") ; ymid = ylo/2-ywid/2 ; endif
>     yt = ymid + yoffset
>     yb = ymid
>     if(xmid='' | xmid ="''") ; xmid = xsiz/2 ; endif
>     if (xwid*cnum > xsiz*barsf)
>       xwid = xsiz*barsf/cnum
>     endif
>     xl = xmid - xwid*cnum/2
> * for horizonal bar, str sizes and offset depend on whether diag or not
>     if(diag != 1)
>       stroff=0.05*sf
>       strxsiz=0.12*sf
>       strysiz=0.13*sf
>       rot=0
>       stloc=tc
>     else
> *     stroff=0.06*sf
>       stroff=0.04*sf
>       strxsiz=0.11*sf
>       strysiz=0.12*sf
>       rot=315
>       stloc=tl
>     endif
>     'set string 1 'stloc' 'thk' 'rot
>     vert = 0
>   endif
>
>
> *
> *  Plot colorbar
> *
>
>
>   'set strsiz 'strxsiz' 'strysiz
>   num = 0
>   while (num<cnum)
>     rec = sublin(shdinfo,num+2)
>     col = subwrd(rec,1)
>     hi = subwrd(rec,3)
>     if (vert)
>       yt = yb + ywid
>     else
>       xr = xl + xwid
>     endif
>
> *   Draw the left/bottom triangle
>     if (num = 0)
>       if(vert = 1)
>         xm = (xl+xr)*0.5
>         'set line 'col
>         'draw polyf 'xl' 'yt' 'xm' 'yb' 'xr' 'yt' 'xl' 'yt
>         'set line 1 1 'thk
>         'draw line 'xl' 'yt' 'xm' 'yb
>         'draw line 'xm' 'yb' 'xr' 'yt
>         'draw line 'xr' 'yt' 'xl' 'yt
>       else
>         ym = (yb+yt)*0.5
>         'set line 'col
>         'draw polyf 'xl' 'ym' 'xr' 'yb' 'xr' 'yt' 'xl' 'ym
>         'set line 1 1 'thk
>         'draw line 'xl' 'ym' 'xr' 'yb
>         'draw line 'xr' 'yb' 'xr' 'yt
>         'draw line 'xr' 'yt' 'xl' 'ym
>       endif
>     endif
>
> *   Draw the middle boxes
>     if (num!=0 & num!= cnum-1)
>       'set line 'col
>       'draw recf 'xl' 'yb' 'xr' 'yt
>       'set line 1 1 'thk
>       'draw rec  'xl' 'yb' 'xr' 'yt
>     endif
>
> *   Draw the right/top triangle
>     if (num = cnum-1)
>       if (vert = 1)
>         'set line 'col
>         'draw polyf 'xl' 'yb' 'xm' 'yt' 'xr' 'yb' 'xl' 'yb
>         'set line 1 1 'thk
>         'draw line 'xl' 'yb' 'xm' 'yt
>         'draw line 'xm' 'yt' 'xr' 'yb
>         'draw line 'xr' 'yb' 'xl' 'yb
>       else
>         'set line 'col
>         'draw polyf 'xr' 'ym' 'xl' 'yb' 'xl' 'yt' 'xr' 'ym
>         'set line 1 1 'thk
>         'draw line 'xr' 'ym' 'xl' 'yb
>         'draw line 'xl' 'yb' 'xl' 'yt
>         'draw line 'xl' 'yt' 'xr' 'ym
>       endif
>     endif
>
> *   Put numbers under each segment of the color key
>     if (num < cnum-1)
>       if (vert)
>         xp=xr+stroff
>         'draw string 'xp' 'yt' 'hi
>       else
>         yp=yb-stroff
>        'draw string 'xr' 'yp' 'hi
>       endif
>     endif
>
> *   Reset variables for next loop execution
>     if (vert)
>       yb = yt
>     else
>       xl = xr
>     endif
>     num = num + 1
>
>   endwhile
>
> return
>



More information about the gradsusr mailing list