[R] Graphics function question

Marc Schwartz marc_schwartz at comcast.net
Tue Jul 29 19:12:05 CEST 2008


on 07/29/2008 11:38 AM Peter Flom wrote:
> Hello
> 
> I have created a graph using the following commands:
> 
> <<<
> startBReP3O1T <- diffs$BReP3O1T - diffs$diff_BReP3O1T
> endBReP3O1T <- diffs$BReP3O1T
> 
> x <- seq(47,89, length = 10)
> ymin <- min(min(startBReP3O1T), min(endBReP3O1T))
> ymax <- max(max(startBReP3O1T), max(endBReP3O1T))
> y <- seq(ymin, ymax, length = 10)
> plot(x,y, type = 'n', xlab = 'Age', ylab = 'BReP3O1T', main = 'Age, decline and BReP3O1T')
> segments(x0 = startage, x1 = endage, y0 = startBReP3O1T, y1 = endBReP3O1T,   col = decline)
> legend('topleft', legend = c('Stable', 'Decline'), lty = 1, col = c(1,2))
> 
> I would like to make this into a function.  The only thing that changes is BReP3O1T.
> The problem is that sometimes this occurs as text (e.g. in ylab and main) sometimes after a $ (e.g. in the
> first two assigment statements), and sometimes it refers to the values (e.g. in ymin and ymax)
> 
> Any help appreciated.
> 
> Peter

Hey Peter, LTNS!  Job change it looks like from the e-mail address?

Here is one approach. It is not clear from the above, where 'startage', 
'endage' and 'decline' come from, so I am passing them as arguments:

In your example above, the function call would be:

MyPlot(diffs$BReP3O1T, diffs$diff_BReP3O1T, startage, endage, decline)


MyPlot <- function(x, y, startage, endage, decline)
{
   start <- x - y
   end <- x

   s1 <- seq(47, 89, length = 10)

   # Don't need to use min/max on each vector separately
   ymin <- min(start, end, na.rm = TRUE)
   ymax <- max(start, end, na.rm = TRUE)

   s2 <- seq(ymin, ymax, length = 10)

   # Turn 'x' into a label, stripping anything before "$" if present
   label <- gsub("^.+\\$", "", deparse(substitute(x)))

   plot(s1, s2, type = "n",  xlab = "Age",  ylab = label,
        main = paste("Age, decline and", label)

   segments(startage, endage, start, end,  col = decline)

   legend("topleft", legend = c("Stable", "Decline"), lty = 1,
          col = c(1, 2))
}



HTH,

Marc Schwartz



More information about the R-help mailing list