Re: [R] Make playwith a default graphic device
On 10/15/07, Felix Andrews <[EMAIL PROTECTED]> wrote: > My previous suggestion was inconsistent with the Trellis/Lattice idea > of creating a trellis object without necessarily creating a plot. And > it also interfered with attempts to plot to a file device. So here is > a better solution, based on replacing `print.trellis`, though it is > still basically a hack. > > library(lattice) > library(plotAndPlayGTK) > > setAutoPlaywith <- function(on=TRUE) { > if (on == FALSE) { > return(rm(print.trellis, envir=.GlobalEnv)) > } > assign("print.trellis", > function(x, position = NULL, split = NULL, more = FALSE, newpage = > TRUE, > packet.panel = packet.panel.default, draw.in = NULL, ...) > { > dev.interactive2 <- function(orNone) dev.interactive(orNone) > || > (interactive() && .Device == "null device" && > getOption("device") == "Cairo") > playing <- 'plotAndPlayUpdate' %in% sapply(sys.calls(), > function(x) > ifelse(is.symbol(x[[1]]), toString(x[[1]]), "")) > new <- newpage && is.null(draw.in) && > !lattice:::lattice.getStatus("print.more") > if (require(plotAndPlayGTK, quietly=TRUE) && > dev.interactive2(TRUE) && !playing && new) { > # starting a new plot on an interactive device > eval.parent(call("playwith", x$call), n=2) > return(invisible()) > } > # call the real `print.trellis`, from lattice package > ocall <- sys.call() > ocall[[1]] <- quote(lattice:::print.trellis) > eval.parent(ocall) > }, envir=.GlobalEnv) > invisible() > } > > setAutoPlaywith(TRUE) > xyplot(Sepal.Length ~ Sepal.Width | Species, data=iris) > setAutoPlaywith(FALSE) > xyplot(Sepal.Length ~ Sepal.Width | Species, data=iris) > > Deepayan, what do you think -- would it be appropriate to make a > Lattice option for something like this? In the next update (today or tomorrow), I'll have print.trellis changed to print.trellis <- function(x, ...) { printFunction <- lattice.getOption("print.function") if (is.null(printFunction)) printFunction <- plot.trellis printFunction(x, ...) invisible(x) } With this, you could do: > lattice.options(print.function = function(x, ...) print(summary(x, ...))) > xyplot(Sepal.Length ~ Sepal.Width | Species, data=iris) Call: xyplot(Sepal.Length ~ Sepal.Width | Species, data = iris) Number of observations: Species setosa versicolor virginica 50 50 50 and plotAndPlayGTK could have: plotAndPlayGTK.trellis <- function(x, position = NULL, split = NULL, more = FALSE, newpage = TRUE, packet.panel = packet.panel.default, draw.in = NULL, ...) { dev.interactive2 <- function(orNone) { dev.interactive(orNone) || (interactive() && .Device == "null device" && getOption("device") == "Cairo") } playing <- 'plotAndPlayUpdate' %in% sapply(sys.calls(), function(x) ifelse(is.symbol(x[[1]]), toString(x[[1]]), "")) new <- (newpage && is.null(draw.in) && !lattice:::lattice.getStatus("print.more")) if (require(plotAndPlayGTK, quietly=TRUE) && dev.interactive2(TRUE) && !playing && new) { ## starting a new plot on an interactive device eval.parent(call("playwith", x$call), n=2) return(invisible()) } ## call the real `print.trellis`, from lattice package ocall <- sys.call() ocall[[1]] <- quote(plot) eval.parent(ocall) } setAutoPlaywith <- function(on=TRUE) { require("lattice") lattice.options(print.function = if (on) plotAndPlayGTK.trellis else NULL) } -Deepayan __ 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.
Re: [R] Make playwith a default graphic device
My previous suggestion was inconsistent with the Trellis/Lattice idea of creating a trellis object without necessarily creating a plot. And it also interfered with attempts to plot to a file device. So here is a better solution, based on replacing `print.trellis`, though it is still basically a hack. library(lattice) library(plotAndPlayGTK) setAutoPlaywith <- function(on=TRUE) { if (on == FALSE) { return(rm(print.trellis, envir=.GlobalEnv)) } assign("print.trellis", function(x, position = NULL, split = NULL, more = FALSE, newpage = TRUE, packet.panel = packet.panel.default, draw.in = NULL, ...) { dev.interactive2 <- function(orNone) dev.interactive(orNone) || (interactive() && .Device == "null device" && getOption("device") == "Cairo") playing <- 'plotAndPlayUpdate' %in% sapply(sys.calls(), function(x) ifelse(is.symbol(x[[1]]), toString(x[[1]]), "")) new <- newpage && is.null(draw.in) && !lattice:::lattice.getStatus("print.more") if (require(plotAndPlayGTK, quietly=TRUE) && dev.interactive2(TRUE) && !playing && new) { # starting a new plot on an interactive device eval.parent(call("playwith", x$call), n=2) return(invisible()) } # call the real `print.trellis`, from lattice package ocall <- sys.call() ocall[[1]] <- quote(lattice:::print.trellis) eval.parent(ocall) }, envir=.GlobalEnv) invisible() } setAutoPlaywith(TRUE) xyplot(Sepal.Length ~ Sepal.Width | Species, data=iris) setAutoPlaywith(FALSE) xyplot(Sepal.Length ~ Sepal.Width | Species, data=iris) Deepayan, what do you think -- would it be appropriate to make a Lattice option for something like this? Felix On 10/14/07, Felix Andrews <[EMAIL PROTECTED]> wrote: > Hi Ronaldo, > > As Professor Ripley explained, playwith is a function, not a device. > It uses a Cairo-based device from the cairoDevice package. I too would > like to have `playwith` as the default behavior for some plots, but > there is no standard way to do that. It can not be implemented as a > device because it needs to know what the high-level plot call is. > > The only way I can think of is to redefine the generic plot > function(s). But that is an ugly hack, and can never cover all cases. > You could do it with the standard Lattice high-level plot functions, > as follows: > > library(lattice) > > latticePlay <- function(x, data, ...) { > playing <- 'plotAndPlayUpdate' %in% > sapply(sys.calls(), function(x) toString(x[[1]])) > if (require(plotAndPlayGTK, quietly=TRUE) && !playing) > return(playwith(plot.call=sys.call())) > eval(sys.call(), as.environment("package:lattice")) > } > > latticeFns <- c("barchart", "bwplot", "cloud", "contourplot", > "densityplot", "dotplot", "histogram", "levelplot", > "parallel", "qq", "qqmath", "splom", "stripplot", > "wireframe", "xyplot") > > ## this will mask all the high-level Lattice generics > invisible(lapply(latticeFns, assign, latticePlay, env=.GlobalEnv)) > > ## now `playwith` is called automatically: > xyplot(Murder ~ Population, data.frame(state.x77)) > > ## to revert (remove definitions from the Global Env) > rm(list=latticeFns) > > Note that this approach does not allow you to specify any of the > optional arguments to playwith(). > > I would be much more reluctant to try the same thing with base > graphics (`plot`, etc) because it would cause problems with > multi-figure layouts. > > I have had several reports of the "figure margins too large" error, > but have not experienced it myself. It seems to happen on unix-like > systems (macOS / linux) and not on windows. The default window size is > supposed to be 640x480 pixels, which should be large enough... > > Best, > Felix > > > On 10/14/07, Prof Brian Ripley <[EMAIL PROTECTED]> wrote: > > You seem to be under the misapprehension that playwith() is a graphics > > device: it is not. > > > > To set a graphics device as the default, use options(device=). I am not > > sure what 'more functionalities' you are looking for: the playwith() uses > > the cairoDevice package for its graphics device, and there is also the > > Cairo package. > > > > On Sat, 13 Oct 2007, Ronaldo Reis Junior wrote: > > > > > Hi, > > > > > > I looking for a graphic device on Linux with more functionalities than > > > the X11 > > > (). I find the plotAndPlayGTK package and the playwith function. It is a > > > good > > > device. It is possible to make it default in my system. > > > > Did you mean that to be a question? > > > > > Now I need: > > > > > >> library(plotAndPlayGTK ) > > > Loading required package: RGtk2 > > > Loa
Re: [R] Make playwith a default graphic device
Em Dom 14 Out 2007, Prof Brian Ripley escreveu: > You seem to be under the misapprehension that playwith() is a graphics > device: it is not. > > To set a graphics device as the default, use options(device=). I am not > sure what 'more functionalities' you are looking for: the playwith() uses > the cairoDevice package for its graphics device, and there is also the > Cairo package. > Dear Prof. Ripley, thanks for your explanation. I looking for a linux' device that have a minimal feature like the windows' device. Features like: save as on mouse clic and/or a menu, change graphics' page on clic, etc. Thanks Ronaldo -- He maps spam, eh? -- palíndromo -- > Prof. Ronaldo Reis Júnior | .''`. UNIMONTES/Depto. Biologia Geral/Lab. de Biologia Computacional | : :' : Campus Universitário Prof. Darcy Ribeiro, Vila Mauricéia | `. `'` CP: 126, CEP: 39401-089, Montes Claros - MG - Brasil | `- Fone: (38) 3229-8187 | [EMAIL PROTECTED] | [EMAIL PROTECTED] | http://www.ppgcb.unimontes.br/ | ICQ#: 5692561 | LinuxUser#: 205366 __ 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.
Re: [R] Make playwith a default graphic device
Hi Ronaldo, As Professor Ripley explained, playwith is a function, not a device. It uses a Cairo-based device from the cairoDevice package. I too would like to have `playwith` as the default behavior for some plots, but there is no standard way to do that. It can not be implemented as a device because it needs to know what the high-level plot call is. The only way I can think of is to redefine the generic plot function(s). But that is an ugly hack, and can never cover all cases. You could do it with the standard Lattice high-level plot functions, as follows: library(lattice) latticePlay <- function(x, data, ...) { playing <- 'plotAndPlayUpdate' %in% sapply(sys.calls(), function(x) toString(x[[1]])) if (require(plotAndPlayGTK, quietly=TRUE) && !playing) return(playwith(plot.call=sys.call())) eval(sys.call(), as.environment("package:lattice")) } latticeFns <- c("barchart", "bwplot", "cloud", "contourplot", "densityplot", "dotplot", "histogram", "levelplot", "parallel", "qq", "qqmath", "splom", "stripplot", "wireframe", "xyplot") ## this will mask all the high-level Lattice generics invisible(lapply(latticeFns, assign, latticePlay, env=.GlobalEnv)) ## now `playwith` is called automatically: xyplot(Murder ~ Population, data.frame(state.x77)) ## to revert (remove definitions from the Global Env) rm(list=latticeFns) Note that this approach does not allow you to specify any of the optional arguments to playwith(). I would be much more reluctant to try the same thing with base graphics (`plot`, etc) because it would cause problems with multi-figure layouts. I have had several reports of the "figure margins too large" error, but have not experienced it myself. It seems to happen on unix-like systems (macOS / linux) and not on windows. The default window size is supposed to be 640x480 pixels, which should be large enough... Best, Felix On 10/14/07, Prof Brian Ripley <[EMAIL PROTECTED]> wrote: > You seem to be under the misapprehension that playwith() is a graphics > device: it is not. > > To set a graphics device as the default, use options(device=). I am not > sure what 'more functionalities' you are looking for: the playwith() uses > the cairoDevice package for its graphics device, and there is also the > Cairo package. > > On Sat, 13 Oct 2007, Ronaldo Reis Junior wrote: > > > Hi, > > > > I looking for a graphic device on Linux with more functionalities than the > > X11 > > (). I find the plotAndPlayGTK package and the playwith function. It is a > > good > > device. It is possible to make it default in my system. > > Did you mean that to be a question? > > > Now I need: > > > >> library(plotAndPlayGTK ) > > Loading required package: RGtk2 > > Loading required package: cairoDevice > >> > >> playwith(plot(1,1)) > > Error in plot.new() : figure margins too large > > > > I got this error above, I dont know why? But in the device I edit call ant > > it > > work. > > > > But I try to put it default and make a more simple use llike this: > > > > plot(1,1) and it use a playwith device to make a plot. > > > > It is possible? > > > > Thanks > > Ronaldo > > -- > >> Prof. Ronaldo Reis Júnior > > | .''`. UNIMONTES/Depto. Biologia Geral/Lab. de Biologia Computacional > > | : :' : Campus Universitário Prof. Darcy Ribeiro, Vila Mauricéia > > | `. `'` CP: 126, CEP: 39401-089, Montes Claros - MG - Brasil > > | `- Fone: (38) 3229-8187 | [EMAIL PROTECTED] | [EMAIL PROTECTED] > > | http://www.ppgcb.unimontes.br/ | ICQ#: 5692561 | LinuxUser#: 205366 > > > > __ > > 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. > > > > -- > Brian D. Ripley, [EMAIL PROTECTED] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UKFax: +44 1865 272595 > __ > 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. > > -- Felix Andrews / 安福立 PhD candidate Integrated Catchment Assessment and Management Centre The Fenner School of Environment and Society The Australian National University (Building 48A), ACT 0200 Beijing Bag, Locked Bag 40, Kingston ACT 2604 http://www.neurofractal.org/felix/ 3358 543D AAC6 22C2 D336 80D9 360B 72DD 3E4C F5D8 __ 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.or
Re: [R] Make playwith a default graphic device
You seem to be under the misapprehension that playwith() is a graphics device: it is not. To set a graphics device as the default, use options(device=). I am not sure what 'more functionalities' you are looking for: the playwith() uses the cairoDevice package for its graphics device, and there is also the Cairo package. On Sat, 13 Oct 2007, Ronaldo Reis Junior wrote: Hi, I looking for a graphic device on Linux with more functionalities than the X11 (). I find the plotAndPlayGTK package and the playwith function. It is a good device. It is possible to make it default in my system. Did you mean that to be a question? Now I need: library(plotAndPlayGTK ) Loading required package: RGtk2 Loading required package: cairoDevice playwith(plot(1,1)) Error in plot.new() : figure margins too large I got this error above, I dont know why? But in the device I edit call ant it work. But I try to put it default and make a more simple use llike this: plot(1,1) and it use a playwith device to make a plot. It is possible? Thanks Ronaldo -- Prof. Ronaldo Reis Júnior | .''`. UNIMONTES/Depto. Biologia Geral/Lab. de Biologia Computacional | : :' : Campus Universitário Prof. Darcy Ribeiro, Vila Mauricéia | `. `'` CP: 126, CEP: 39401-089, Montes Claros - MG - Brasil | `- Fone: (38) 3229-8187 | [EMAIL PROTECTED] | [EMAIL PROTECTED] | http://www.ppgcb.unimontes.br/ | ICQ#: 5692561 | LinuxUser#: 205366 __ 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. -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UKFax: +44 1865 272595__ 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.