[R] How to stamp my graphs with date and time

David Winsemius dwinsemius at comcast.net
Sun Apr 25 03:49:07 CEST 2010


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 <dwinsemius at 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.sarkar at gmail.com 
>> > wrote:
>> On Wed, Apr 21, 2010 at 4:02 PM, David Winsemius <dwinsemius at 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 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