On 05/08/2010 7:18 PM, David B. Thompson, Ph.D., P.E., D.WRE, CFM wrote:
I'm running R 2.11.1 (MacBook Pro and OS X 10.6.4) and am trying to set a line 
type in the contour() function. What I did was:

u<-seq(0.005,0.995,0.005)
v<-u
p<-rep(0,length(u)*length(u))
dim(p)<-c(length(v),length(v))
for (i in 1:length(u)) for (j in 1:length(v)) p[i,j]<-u[i]^2+v[j]^2
contour(u,v,p)

This produces a nice contour plot, as expected. However, if I execute:

contour(u,v,p,lty=2)

I still get a solid line drawn.

I also tried:

contour(u,v,p,lty="dashed")

with the same result (solid line).

Interestingly, if I load the volcano data from the datasets package and run

contour(volcano,lty=2)

R draws a nice dashed line for the contours.

I tried the usual suspects (Googled plenty) and have not found a solution to my 
issue. has anyone else encountered this problem? Any clues for me? I don't mind 
doing the work, but am at a lack for direction.

Thanks...


I can reproduce the problem in current R-devel. It has something to do with the grid size; if I change the step size for u to 0.1 instead of 0.005, p becomes 10 by 10 instead of 199 by 199, and things look fine. The volcano dataset is 87 by 61, and changing the code to give a rectangle of that size also gives dashes, but not quite so nice ones.

I don't know where this comes from.  Possibilities I'd guess are:

- The graphics device starts the dashing again in every cell of the grid, so you're only seeing the solid parts. (But I see this in several graphics devices, so it's not at the lowest level, and R graphs have no problem with curved dashed lines in other contexts. Still, they might use different ways to draw things.)

- There's some array-overwrite bug, and it only shows up for big arrays. (But it seems like a pretty strangely consistent manifestation for that).

If you want to look for a problem in the contour function, it's in src/main/plot3d.c. If you want to look at the lower level graphics stuff, try src/main/engine.c for CScliplines or individual device code, e.g. GA_Polyline in src/library/grDevices/src/devWindows.c for the windows() device.

I don't really know where to start on this, so I'm going to bail out. Here's a partial workaround. Instead of contour(u, v, p, lty=2), do it as

x <- contourLines(u, v, p)
plot(range(u), range(v), type="n")
lapply(x, function(c) lines(c, lty=2))

If you need labelled contour lines, I don't know what to suggest.

Duncan Murdoch

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to