On Apr 24, 2010, at 9:00 PM, David Winsemius wrote:


On Apr 24, 2010, at 6:26 PM, Jun Shen wrote:

Hi, David,

Thanks. It is working perfectly now. But I still don't understand the argument "page", I couldn't find it in text() or par().

text and par are base graphics functions. page is an argument to lattice functions:

(Page 26 of Sarkar;'s book says):

"Another type of annotation directly supported by lattice functions is through the page argument. If specified, it has to be a function, and is called after each page is drawn. It can be used, for example to mark the page numbers in a multipage display."

The code for Figure 12.1 uses it to locate a legend. (See the website.)


Also in the "page = function(n){......}" the argument "n" does not appear anywhere and it seems OK to be replaced with any other letter. Can anyone explain it a little bit?

That "n" could be replaced, not just with any single letter but with any string, as long as it was used properly (or not used at all) within the function body. That's just programming. Given what I know about R programming (not a huge amount) , I strongly suspect you could leave it out all together. Lot's of R functions have no formal arguments.

And I would have been ( er, was) wrong. You do need a dummy argument in the function even if it's not used.

--
David.



Jun

On Sat, Apr 24, 2010 at 4:14 PM, David Winsemius <dwinsem...@comcast.net > wrote:

On Apr 24, 2010, at 4:52 PM, Jun Shen wrote:

Hi,

I also want to show user's name at the lower-left corner. So I added one more line to Deepayan's code but it didn't work. I am not sure how to use the "page" argument here. Appreciate any comment.

lattice.options(default.args = list(page = function(n) {
 panel.text(lab = sprintf("%s", date()), x = 0.99, y = 0.02, adj = 1)
panel.text(lab = sprintf("%s", paste("User:",Sys.getenv("USERNAME"))), x = 0.01, y = 0.02)
}))


Using 0 for the adj argument:


lattice.options(default.args = list(page = function(n) {
panel.text(lab = sprintf("%s", date()), x = 0.99, y = 0.02, adj = 1) panel.text(lab = sprintf("%s", paste("User:",Sys.getenv("USERNAME"))),
              x = 0.01, y = 0.02, adj=0)
}))

> xyplot(1~1)  # works

Seems to work. Panel.text did not help me, but it pointed to the base graphics functions which I interpreted to be text() and in the Details section it does.

--
David


Jun

On Fri, Apr 23, 2010 at 10:32 AM, Deepayan Sarkar <deepayan.sar...@gmail.com > wrote: On Wed, Apr 21, 2010 at 4:02 PM, David Winsemius <dwinsem...@comcast.net > wrote:
>
> On Apr 21, 2010, at 6:58 PM, David Winsemius wrote:
>
>> Sarkar offers a worked example of taking user input regarding location for
>> locating a grid viewport outside the plot area.
>>
>> http://lmdvr.r-forge.r-project.org/figures/figures.html
>>
>> See Figure 12.1
>>
>> state <- data.frame(state.x77, state.region)
>> trellis.vpname("xlab", prefix = "plot1")
>> trellis.vpname("strip", column = 2, row = 2, prefix = "plot2")
>>
>>
>> data(Chem97, package = "mlmRev")
>> qqmath(~ gcsescore | factor(score), Chem97, groups = gender,
>>      f.value = function(n) ppoints(100),
>>      aspect = "xy",
>>      page = function(n) {
>>          cat("Click on plot to place legend", fill = TRUE)
>>          ll <- grid.locator(unit = "npc")
>>          if (!is.null(ll))
>>              draw.key(simpleKey(levels(factor(Chem97$gender))),
>>                       vp = viewport(x = ll$x, y = ll$y),
>>                       draw = TRUE)
>>      })
>>
>
> Furthermore when I try:
>
> mtext(date(), side=3, line=4, adj=0)
>
> .... I get a datetime stamp even though I am mixing graphic paradigms. This > would seem to be one of those instances where you needn't worry about
> getting the internal coordinates to match up.

Appearances can be deceiving. Try to create a PDF file with this, and
you will get

> pdf()
> xyplot(1 ~ 1)
> mtext(date(), side=1, line=4, adj=0)
Error in mtext(date(), side = 1, line = 4, adj = 0) :
plot.new has not been called yet
> dev.off()

Try to copy the screen device to PDF, and you will get

> dev.copy(pdf, file = "/tmp/foo.pdf")
Error in dev.copy(pdf, file = "/tmp/foo.pdf") : invalid graphics state

For a footnote in lattice plots, page is the appropriate argument to
use. Adapting an example from the book (section 9.3), the following
will add a timestamp to all subsequent lattice plots:

lattice.options(default.args = list(page = function(n) {
 panel.text(lab = sprintf("%s", date()), x = 0.99, y = 0.05, adj = 1)
}))

xyplot(1 ~ 1)


-Deepayan


David Winsemius, MD
West Hartford, CT



David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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

______________________________________________
R-help@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.

Reply via email to