Dynamic PLOT Visualizations

The PLOT function's Equation argument (and the EQUATION property) adds a level of flexibility to the creation of plots. This topic explores ways you can use the Equation argument to create dynamic, interactive plots.

The Equation argument on the PLOT function allows you to specify either a string containing an equation with variable X, or the name of an IDL function that accepts X as an input argument. The result of the equation (or the function) should be a one-dimensional array of Y coordinates to be plotted.

Once IDL creates the plot output, if you then interactively adjust the plot range, IDL will automatically recompute the equation to cover the new range.

Using an Equation String

For the first example, we will have IDL plot the LAMBERTW function:

p1 = PLOT('LambertW(x)', '2', DIMENSIONS=[400,400],$

NAME='Upper branch', $

TITLE='Lambert W Function', XRANGE=[-0.4, 1])

p2 = PLOT('LambertW(x, /LOWER_BRANCH)', '2r', /OVERPLOT, $

NAME='Lower branch')

lg = LEGEND(/DATA, POSITION=[0.95, -6], LINESTYLE=6, SHADOW=0)

This should produce the following graphic:

Once IDL creates the plot, test out its dynamic capabilities:

p1.XRANGE = [-0.5, 0.5]

p1.YRANGE = [-2, 1]

In all of these cases, as you change the plot range, IDL recomputes the equation with new X values that span the new range.

Using an Equation Function

Using an equation string has some limitations:

As a different approach, create an IDL function containing your equation and then pass the function name to the Equation argument. This method allows you a bit more flexibility in your input equations.

For example, in the first line of the code above, we could have written:

p1 = PLOT('LambertW', '2', DIMENSIONS=[400,400],$

NAME='Upper branch', $

TITLE='Lambert W Function', XRANGE=[-0.4, 2])

Notice that we no longer have an X variable in our equation, we just have the name of the function.

We can also create our own routine which accepts our X vector and some optional user data.

First, create a new IDL routine called ex_plot_function and save it in a file ex_plot_function.pro on IDL's path:

FUNCTION ex_plot_function, x, k

COMPILE_OPT IDL2

RETURN, LAMBERTW(DCOMPLEX(x), k)

END

Next, we create our plot visualization, passing in the name of our equation along with our user data containing the "branch" parameter k:

p1 = PLOT('ex_plot_function', '2', DIMENSIONS=[400,400],$

NAME='k = 0', EQN_USERDATA=0, $

TITLE='$\Re${LambertW}', XRANGE=[-1, 2])

p2r = PLOT('ex_plot_function', '2r', /OVERPLOT, $

NAME='k = -1', EQN_USERDATA=-1)

p3r = PLOT('ex_plot_function', '2g', /OVERPLOT, $

NAME='k = 1', EQN_USERDATA=1)

p4r = PLOT('ex_plot_function', '2b', /OVERPLOT, $

NAME='k = 2', EQN_USERDATA=2)

lg = LEGEND(/DATA, POSITION=[1.9, -4], LINESTYLE=6, SHADOW=0)

Our plot should now look like the following:

Again, we can pan and zoom around the plot, and IDL will automatically update the equations.

 

Other Topics in this Series

See Also

CALL_FUNCTION, EXECUTE, LAMBERTW, LEGENDPLOT