# Re: PLOT question

```Stuart Colley wrote:
> What I want to do is swap time for phase angle, so the phase is
> somewhere between 0 - 2pi, but the problem is that the phase angle
> repeats,  so what I was looking for on the axis was something
> like:
>
> y value |
>         |
>         |       x                   x
>         | x          x          x          x           x
> ________|__________________x_____________________x___________
> time    | 0   pi/2   pi  3pi/2  0  pi/2   pi   3pi/2   0  etc...
>
>                                 |
>                end of first cycle, start of second
>
> What I'll probably do is use xtickv and xtickname to set the ticks, since
> as far as I can tell, you MUST 'plot, t, y' to get the plot right,
> 'plot, phase, y' results in the data being merged together and only one
> cycle being plotted.
>
> The reason I sent the first post - I was wondering if there was an easier
> way than xtickv/xtickname since it can't automatically choose the tick
> values like PLOT can, and isn't so flexible when I'm trying to write a
> general purpose routine.

The XTICKFORMAT mechanism as proposed by Dave should give you the
periodic phase angle tick values, if you plug in the logic by Craig:

FUNCTION PHASE_ANGLE, axis, index, t
phase = (t-t0)/period
phase = phase - floor(phase)
; this phase angle goes from 0 to 1, you want 0 - 2pi:
phase = 2*!PI*phase
RETURN, STRING(phase)
END
..
PLOT, t, y, XTICKFORMAT='PHASE_ANGLE'

Now PLOT will automatically choose "nice" tick values based on the
original time values, e.g. 1 s, 2 s, ... You would like "nice" values in
phase angle (pi, 2pi, ..), so I would plot as a function of t/period
(actually the total phase angle), just to get the tick marks at nice
locations:

FUNCTION PHASE_ANGLE, axis, index, totalphase
phase = totalphase - floor(totalphase)
; this phase angle goes from 0 to 1, you want 0 - 2pi:
phase = 2 * !pi * phase
RETURN, (FORMAT_AXIS_VALUES(phase))[0]
END
..
t0 = 0  ; starting time of first (or any) period
PLOT, (t-t0)/period, y, XTICKFORMAT='PHASE_ANGLE'

One important thing here: you need to make sure that IDL uses at least
two tick marks per period, or else these nice periodic tick values will
look just like a ordinary series of zeroes. (for this, set the XTICKS
keyword if necessary)

I used FORMAT_AXIS_VALUES to get "nice" formatting of the strings. If
you *really* want "3pi/2" at your tick mark instead of 4.71 , then that
should not be too difficult to code into the PHASE_ANGLE function.
Better left as an exercise to the reader...

Jaco

------------------------------
Jaco van Gorkom            gorkom@rijnh.nl
FOM-Instituut voor Plasmafysica Rijnhuizen

```