graphidl-programming-language

IDL two step graph


I'm struggling with setting a y(x) condition that varies with x range. As an example below, the code wants to plot y=x between x=0 and x=5.1; otherwise y=2x.

Upon compilation, the code spits out the following: Expression must be a scalar or 1 element array in this context:

In other words don't know how to assign an array variable 'x' into if statement.

Thank you all for your help in advance.

PRO test        


x = findgen(101.0,start=0)/10.0 ; 0.0 start, 10.0 end increment of 0.1 


print,x


if   x lt 5.1    then begin

y = 1.0 * x  ; 

endif else begin

y = 2.0* x

endelse


graph1=plot(x,y,thick=2,NAME=first,/CURRENT, $
linestyle = 0, ytitle=' y',xtitle='x' ) ; O


END

Solution

  • The problem is the test in your IF statement. Use WHERE instead to do something like the following.

    y   = x     ;;  need to initialize variable
    low = WHERE(x lt 5.1,lw,COMPLEMENT=upp,NCOMPLEMENT=up)
    IF (lw[0] GT 0) THEN y[low] = x[low]  ;; technically don't need this line
    IF (up[0] GT 0) THEN y[upp] = 2e0*x[upp]