[R-sig-Debian] "Graphics history" in UNIX

Deepayan Sarkar deepayan.sarkar at gmail.com
Thu Jun 10 13:30:23 CEST 2010


On Wed, Jun 9, 2010 at 5:42 PM, Scotti Roberto <roberto.scotti at gmail.com> wrote:
> Hello. First post, please excuse lack of experience.
>
> I recently switched from MS-Win to Kubuntu and find it rather difficult
> to recover Cran-R ease of use.
> The "Graphics history" facility available under Windows was, for me,
> extremely useful.
>  From Murrell's 2005 book (see citation below) I understand that no such
> facility is available under non-Windows systems.
> In R-help archive, a 2000 comment from Ripley seems to confirm. (see below)
> Questions:
> - do I correctly understand that  "No <Graphics history> facility is
> available for Linux systems"?
> - (if Yes above) Please, let me understand why??

The basic tools required are still available. For example, you can
easily do manual (command-line) recording and replaying thus:

rp <- function()
{
    env <- environment()
    recorded <- list()
    current <- 0L
    record <- function()
    {
        current <<- length(recorded) + 1L
        recorded[[current]] <<- recordPlot()
        print(current)
    }
    replay <- function(n = current - 1L)
    {
        if (n > 0 && n <= length(recorded)) {
            current <<- n
            replayPlot(recorded[[current]])
        }
        else message("'n' not in valid range: ", n)
    }
    restore <- function() replay(n = length(recorded))
    showPrevious <- function() replay(n = current - 1L)
    showNext <- function() replay(n = current + 1L)
    env
}

rp <- rp()


plot(1:10) ## plot something
rp$record() ## record it
plot(rnorm(10)) ## plot something else
rp$record() ## record it

rp$showPrevious() ## show previous plot
rp$restore() ## show last recorded plot


The main trick is to (1) have the plots saved automatically whenever a
new page is created and (2) have a GUI interface for navigating
through the history. (1) needs device support (only the device really
knows when a new page is created), although you can get a partial
solution using user-level hooks. (2) needs some sort of GUI interface
to be available, which isn't really there for the x11 device.

So in short, it's technically feasible, but not supported by the
standard screen device. There are third party screen devices
available, and it would be easier for them to support recording (if
they don't already).

-Deepayan



More information about the R-SIG-Debian mailing list