[Rd] Problems with plot and Quartz device (PR#13744)

Simon Urbanek simon.urbanek at r-project.org
Wed Jun 3 22:25:51 CEST 2009


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:

> Dear Simon,
>
> Thank you very much for the very rapid response!
>
>> rna is not defined in R, can you, please, supply a reproducible  
>> example?
>
> 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:
>
>> Thomas,
>>
>
>> 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:
>>
>>> 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
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>



More information about the R-devel mailing list