[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