Skip to content

Problems with plot and Quartz device (PR#13744)

7 messages · tsr at stat.washington.edu, Thomas Richardson, Simon Urbanek

#
Full_Name: Thomas Richardson
Version: R 2.9.0 GUI 1.28 Tiger build 32-bit (5395)
OS: 10.4.11
Submission from: (NULL) (216.254.15.72)



I have encountered a problem with points in scatterplots disappearing in a
quartz window when it is re-sized (to make it larger).

I am constructing an 8x12 matrix of scatterplots each containing approx 600
points.
In order to get them in the window I remove the axes etc.,

quartz()
par(mfrow=c(8,12), mar=c(0,0,0,0), oma=c(0,0,0,0))
for(i in 1:8){ # Row counter
for(j in 1:12){ # Col counter		
plot(rna$red[(rna$row==levels(rna$row[i])&(rna$col==j)],
     rna$tof[(rna$row==levels(rna$row[i])&(rna$col==j)],
     xlab="tof",ylab="green",xaxt="n",yaxt="n",
     ann=FALSE,xlim=c(0,100),ylim=c(0,300),pch=".")
}
}

Here is the problem:  how many data points actually appear in the quartz window
on my screen is highly sensitive to the width and height specified. If I specify
a different width and height for the quartz window e.g.
quartz(width=8,height=8), OR if I resize the window with the cursor then points
disappear in certain (x-axis) ranges across all the plots in some columns. These
bands in which points disappear are the same for all plots in a given column,
and can be very wide - making a lot of points disappear. 

(The visual effect is to make it look as if there are clearly defined vertical
white lines going across the scatterplots - though the black lines enclosing
each plot are not broken).

The problem seems to disappear with other plotting symbols e.g. pch="+" (but
then I end up with crowded plots). So I guess it might be related to the
"special treatment" of "." described on help(points) ??
---
Value pch="." (equivalently pch = 46) is handled specially. It is a rectangle of
side 0.01 inch (scaled by cex).
---

I find this behaviour unnerving: the (resized) plots made it look as if there
was a lot of structure in the data, but on closer inspection it turned out to be
entirely a consequence of the quartz device and plot function!

I can't imagine that this behaviour is intended - even if it were intended to
suppress points (like some axis labels) - it seems strange that enlarging the
window makes points disappear. (I also tried setting dpi=72 in quartz(), but
this did not fix the problem).

Thanks in advance.

Thomas

------------------------------------------------------
 sessionInfo()
R version 2.9.0 (2009-04-17) 
i386-apple-darwin8.11.1 

locale:
en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
#
Thomas,

rna is not defined in R, can you, please, supply a reproducible  
example? From your description I think I know roughly what's going on  
(Quartz attempts to snap rectangles on pixel boundaries to prevent  
malignant anti-aliasing effects in image plots and this may somehow  
interact with pch='.' since Quartz has no way of knowing that those  
rectangles are supposed to be glyphs), but I cannot reproduce it.

Thanks,
Simon
On Jun 3, 2009, at 4:45 , tsr at stat.washington.edu wrote:

            
#
On Jun 3, 2009, at 4:45 , tsr at stat.washington.edu wrote:

            
BTW: you may want to use something like pch=19, cex=0.1 (and maybe add  
some alpha to get a quick density estimation).

Cheers,
S
#
Dear Simon,

Thank you very much for the very rapid response!
Apologies for including code that could not be run directly.
(I had assumed simulating "similar" data would give the same behaviour, 
but having done more experiments, I see that it is not so simple to get 
this - which makes me very curious about what is really going on!)

I have put the data that I used on the web. I enclose R code below. At 
least on my machine a simple visual comparison of the first column of 
plots in these two quartz windows shows that half of the points in these 
plots, those on the left side of each panel, have disappeared in the 
larger quartz window!

Thanks again.

Best wishes,

Thomas

-----------------------------------------------

# (Hopefully) reproducible code for disappearing pch="." points phenomenon

mydata <- read.table("http://www.stat.washington.edu/tsr/streaking.dat")

quartz()
par(mfrow=c(8,12), mar=c(0,0,0,0), oma=c(0,0,0,0))
for(i in 1:8){ # Row counter
for(j in 1:12){ # Col counter
 	xtmp <- mydata[,1]
 	x <- xtmp[(mydata[,3]==i)&(mydata[,4]==j)]
 	ytmp <- mydata[,2]
 	y <- ytmp[(mydata[,3]==i)&(mydata[,4]==j)]
plot(x,y,xaxt="n",yaxt="n",ann=FALSE,xlim=c(0,100),ylim=c(0,300),pch=".")
}
}

quartz(width=12,height=8)
par(mfrow=c(8,12), mar=c(0,0,0,0), oma=c(0,0,0,0))
for(i in 1:8){ # Row counter
for(j in 1:12){ # Col counter
 	xtmp <- mydata[,1]
 	x <- xtmp[(mydata[,3]==i)&(mydata[,4]==j)]
 	ytmp <- mydata[,2]
 	y <- ytmp[(mydata[,3]==i)&(mydata[,4]==j)]
plot(x,y,xaxt="n",yaxt="n",ann=FALSE,xlim=c(0,100),ylim=c(0,300),pch=".")
}
}


-----------------------------------------------
On Wed, 3 Jun 2009, Simon Urbanek wrote:

            
#
PS Please forgive my ignorance, but when you say:
I don't know what alpha refers to here.

Thanks again.

Best wishes,

Thomas
#
On Jun 3, 2009, at 15:00 , Thomas Richardson wrote:

            
alpha = alpha component of the color (100% = opaque, 0% =  
transparent). Using alpha < 100% with pch=19 is a good way to get a  
rough density estimation in cases where points overlap since the  
overall opacity will increase with the number of overlapping points.

E.g., compare
plot(rnorm(1e5), rnorm(1e5), pch=19, cex=0.2)
to
plot(rnorm(1e5), rnorm(1e5), pch=19, col="#00000010", cex=0.2)

Varying the alpha will allow you to shift the focus from outliers to  
global patterns.

Cheers,
Simon
#
Thanks, Thomas.

It is indeed a very interesting phenomenon. Apparently the discrete  
structure in the data interacts with the way the data are plotted on a  
very small scale. I have committed a work-around - it forces  
rectangles to retain at least their original width/height when  
snapping to pixels causes it to shrink to 0 (i.e. the width or height  
is < 0.5 pixels).

Thanks,
Simon
On Jun 3, 2009, at 14:54 , Thomas Richardson wrote: