[R] Problem with circular::plot.circular()

Duncan Murdoch murdoch at stats.uwo.ca
Sun Mar 29 15:58:49 CEST 2009

```On 29/03/2009 9:23 AM, Michael Kubovy wrote:
> Thanks so much. I have another question:
>
> why the difference here:
>
> require(circular)
> c1 <- circular(pi/2 + .00000, zero = pi/2, rotation = 'clock')
> c2 <- circular(pi/2 + .00001, zero = pi/2, rotation = 'clock')
> opar <- par(mfrow = c(1, 2))
> plot(c1, stack = TRUE, bins = 10000, main = expression(pi/2))
> plot(c2, stack = TRUE, bins = 10000, main = expression(pi/2 + .00001))
> par(opar)

I don't see any points in the first plot, but the second one looks as
I'd expect.  Looks like a bug to me.  I've cc'd the maintainer.

In the PointsCircularRad function, this code does the counting:

for (i in 1:bins) {
bins.count[i] <- sum(x <= i * arc & x > (i - 1) * arc)
}

At this point x has been transformed to a vector of zeros, arc is the
size of a bin in radians.  But the expression above misses exact zeros,
since it assumes x is positive.  A simple fix is to add a line after saying

bins.count[bins] <- bins.count[bins] + sum(x <= 0)

Duncan Murdoch

>
> On Mar 29, 2009, at 8:09 AM, Duncan Murdoch wrote:
>
>> On 29/03/2009 7:39 AM, Michael Kubovy wrote:
>>> require(circular)
>>> c <- circular(rep(0, 20), zero = pi/2, rotation = 'clock')
>>> plot(c, stack = TRUE, shrink = 1.5)
>>> Can anyone tell me why the stack is offset from 0?
>> It's a histogram, and the bin starts at zero, and runs to pi/10 (I'm
>> guessing, since it appears to choose 20 bins).
>>
>> You can see the binning effect if you set your data to
>>
>> c <- circular(runif(20, 0, 2*pi), zero=pi/2, rotation='clock')
>>
>> Set bins to 10000 and the offset will be undetectable:
>>
>> plot(c, stack = TRUE, shrink = 1.5, bins=10000)
>>
>> Duncan Murdoch

```