Viewing contents of file '../idllib/contrib/tappin/graffer/gr_as_xr.pro'
pro Gr_as_xr, data, yrange, ytype, range
;+
; GR_AS_XR
; Autoscale graffer data (X-Axis, rectangular plot)
;
; Usage:
; gr_as_xr, data, range
;
; Arguments:
; data struct input The Graffer data structure (extracted
; from PDEFS)
; yrange float input The Y- range for functions (x=f(y))
; ytype int input log or linear Y (ditto)
; range float in/out The range to use.
;
; History:
; Extracted from GR_AUTOSCALE: 16/12/96; SJT
;-
handle_value, data.xydata, xydata, /no_copy
fv = 0. ; Just create the variable
case (data.type) of
-1: if (xydata.range(0) ne xydata.range(1)) then begin ;Y = F(x)
range(0) = range(0) < xydata.range(0)
range(1) = range(1) > xydata.range(1)
endif
-2: begin ; X = f(y)
if (xydata.range(0) ne xydata.range(1)) then begin
amin = yrange(0) > xydata.range(0)
amax = yrange(1) < xydata.range(1)
endif else begin
amin = yrange(0)
amax = yrange(1)
endelse
if (ytype) then begin
amin = alog10(amin)
amax = alog10(amax)
y = 10^(findgen(data.ndata) * (amax-amin) $
/ float(data.ndata-1) + amin)
endif else y = findgen(data.ndata) * (amax-amin) $
/ float(data.ndata-1) + amin
iexe = execute('fv = '+xydata.funct)
range(0) = range(0) < min(fv, max = fvmx)
range(1) = range(1) > fvmx
end
-3: begin ; x = f(t), y = f(t)
t = findgen(data.ndata) * $
(xydata.range(1)-xydata.range(0)) $
/ float(data.ndata-1) + xydata.range(0)
iexe = execute('fv = '+xydata.funct(0))
range(0) = range(0) < min(fv, max = fvmx)
range(1) = range(1) > fvmx
end
-4: if (xydata.range(0, 0) ne xydata.range(1, 0)) then $
begin ; z = f(x,y)
range(0) = range(0) < xydata.range(0, 0)
range(1) = range(1) > xydata.range(1, 0)
endif
9: begin ; Surface data
handle_value, xydata.x, x, /no_copy
range(0) = range(0) < min(x, max = mx)
range(1) = range(1) > mx
handle_value, xydata.x, x, /no_copy, /set
end
Else: begin ; XY data, much easier (or it was)
if (data.type le 2) then begin
xp = xydata(0, 0:data.ndata-1)
xm = xydata(0, 0:data.ndata-1)
endif else if (data.type eq 3 or $
data.type eq 5 or $
data.type eq 6) then begin
xp = xydata(0, 0:data.ndata-1) + $
(finite(xydata(2, 0:data.ndata-1)) and $
xydata(2, 0:data.ndata-1))
xm = xydata(0, 0:data.ndata-1) - $
(finite(xydata(2, 0:data.ndata-1)) and $
xydata(2, 0:data.ndata-1))
endif else begin
xp = xydata(0, 0:data.ndata-1) + $
(finite(xydata(3, 0:data.ndata-1)) and $
xydata(3, 0:data.ndata-1))
xm = xydata(0, 0:data.ndata-1) - $
(finite(xydata(2, 0:data.ndata-1)) and $
xydata(2, 0:data.ndata-1))
endelse
locs = where(finite(xm), nf)
if (nf gt 0) then range(0) = range(0) < min(xm(locs))
locs = where(finite(xp), nf)
if (nf gt 0) then range(1) = range(1) > max(xp(locs))
end
endcase
handle_value, data.xydata, xydata, /no_copy, /set
end