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