[R] panel.first problem when plotting with formula

David Winsemius dwinsemius at comcast.net
Wed May 25 16:34:20 CEST 2011


On May 24, 2011, at 11:42 PM, Gene Leynes wrote:

> Peter,
>
> Good idea!  (why didn't I think of that?)
>
> If it stumped the r-list, I think there is probably a slight bug  
> with the
> plot formula.
>
> Problems like this make me realize how amazingly full featured and
> relatively bug free R is.  A problem like this would never happen in  
> Excel,
> because this level of functionality does not exist.  However, if it  
> did, it
> would probably never be fixed... and you could substitute "Excel"  
> with "Any
> commercial software".


plot(dat, panel.first=bgfun() ) # succeeds

So the problem is not with plot.data.frame.

So someplace in the processing of dots and the handoff to

do.call(funname, c(list(mf[[i]], y, ylab = yl,  xlab = xl), dots))

... where funname = "plot", the dot identities do not get honored. The  
'plot" function is where it all started, but the first argument is now  
mf[[i]], and is that is now a numeric vector. So I think it gets  
handed off to plot.default,  which sets panel.first to NULL.

-- 
David.
>
> Gene
>
>
> On Tue, May 24, 2011 at 3:13 AM, Peter Ehlers <ehlers at ucalgary.ca>  
> wrote:
>
>> On 2011-05-23 16:54, Gene Leynes wrote:
>>
>>> I wrote a little function called bgfun that adds gridlines and a
>>> background,
>>> but it's not working with I plot using the formula.
>>>
>>> I have some theories on what's happening, but even if my theory is  
>>> right,
>>> I
>>> don't know how to fix it.
>>>
>>> Someone have a straightforward silver bullet?
>>>
>>
>> No silver bullet, but this seems to work:
>>
>> plot(y ~ x, data=dat, type="n")
>> points(y ~ x, data=dat, panel.first=bgfun())
>>
>> (I think that plot.formula may need a fix but
>> offhand I can't see whether that's easy or hard.)
>>
>> Peter Ehlers
>>
>>
>>> Thank you,
>>>
>>> Gene
>>>
>>>
>>>
>>> bgfun = function(color='honeydew2',linecolor='grey45',  
>>> addgridlines=TRUE){
>>>    tmp=par("usr")
>>>    rect(tmp[1], tmp[3], tmp[2], tmp[4], col=color)
>>>    if(addgridlines){
>>>        ylimits=par()$usr[c(3,4)]
>>>        abline(h=pretty(ylimits,10), lty=2, col=linecolor)
>>>    }
>>> }
>>> dat = data.frame(x=1:10,y=1:10)
>>>
>>> ## Works
>>> plot(dat$x, dat$y, panel.first=bgfun())
>>>
>>> ## Why doesn't this work?
>>> plot(y ~ x, data=dat, panel.first=bgfun())
>>>
>>>       [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>>
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list