Rev 68953 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/grid/vignettes/interactive.Rnw% Part of the R package, https://www.R-project.org% Copyright 2001-13 Paul Murrell and the R Core Team% Distributed under GPL 2 or later\documentclass[a4paper]{article}%\VignetteIndexEntry{Editing grid Graphics}%\VignettePackage{grid}\newcommand{\code}[1]{\texttt{#1}}\newcommand{\pkg}[1]{{\normalfont\fontseries{b}\selectfont #1}}\newcommand{\grid}{\pkg{grid}}\newcommand{\R}{{\sffamily R}}\setlength{\parindent}{0in}\setlength{\parskip}{.1in}\setlength{\textwidth}{140mm}\setlength{\oddsidemargin}{10mm}\title{An Example of Interactive Graphics Editing in \grid}\author{Paul Murrell}\begin{document}\maketitle<<echo=FALSE, results=hide>>=library(grDevices)library(grid)ps.options(pointsize = 12)options(width = 60)@First of all, we create an x-axis and draw it on the device.It is very important that we specify a \code{name} for the objectso that we can refer to it later.<<fig1, results=hide, fig=TRUE, width=6, height=2, include=FALSE>>=grid.xaxis(at = 1:4/5, vp = viewport(w = .5, h = 0.01), name = "gxa")@\begin{center}{\includegraphics[width=3in, height=1in]{interactive-fig1}}\end{center}@Now we edit the axis, changing the colour of the entire axis to red.Notice that we refer to the x-axis by its name.<<edit1, eval=FALSE>>=grid.edit("gxa", gp = gpar(col = "red"))<<fig2, echo=FALSE, results=hide, fig=TRUE, width=6, height=2, include=FALSE>>=gxa <- xaxisGrob(at = 1:4/5, vp = viewport(w = .5, h = .01))gxa <- editGrob(gxa, gp = gpar(col = "red"))grid.draw(gxa)@\begin{center}{\includegraphics[width=3in, height=1in]{interactive-fig2}}\end{center}@Now we change just the labels of the x-axis to green. We use the\code{gPath()} function to concatenate the grob names (we could have used\code{"gxa::labels"} here, but \code{gPath()} is recommended forwriting code that will be reused).<<edit2, eval=FALSE>>=grid.edit(gPath("gxa", "labels"), gp = gpar(col = "green"))<<fig3, echo=FALSE, results=hide, fig=TRUE, width=6, height=2, include=FALSE>>=gxa <- xaxisGrob(at = 1:4/5, vp = viewport(w = .5, h = .01))gxa <- editGrob(gxa, gp = gpar(col = "red"))gxa <- editGrob(gxa, gPath = "labels", gp = gpar(col = "green"))grid.draw(gxa)@\begin{center}{\includegraphics[width=3in, height=1in]{interactive-fig3}}\end{center}@It is also possible to change the number of tick marks.Notice that the labels all change back to red; this happensbecause new labels are created by the axis and these ``inherit''the colour of the axis by default. In other words, thecolour specification of the old labels was specific to the old labelsand was discarded when the old labels were discarded.<<edit3, eval=FALSE>>=grid.edit("gxa", at = c(0.0, 0.5, 1.0))<<fig4, echo=FALSE, results=hide, fig=TRUE, width=6, height=2, include=FALSE>>=gxa <- xaxisGrob(at = 1:4/5, vp = viewport(w = .5, h = .01))gxa <- editGrob(gxa, gp = gpar(col = "red"))gxa <- editGrob(gxa, gPath = "labels", gp = gpar(col = "green"))gxa <- editGrob(gxa, at = c(0.0, 0.5, 1.0))grid.draw(gxa)@\begin{center}{\includegraphics[width=3in, height=1in]{interactive-fig4}}\end{center}@Finally, we change the labels back to black and rotate them all $30\deg$.<<edit4, eval=FALSE>>=grid.edit("gxa::labels", gp = gpar(col = "black"), rot = 30)<<fig5, echo=FALSE, results=hide, fig=TRUE, width=6, height=2, include=FALSE>>=gxa <- xaxisGrob(at = 1:4/5, vp = viewport(w = .5, h = .01))gxa <- editGrob(gxa, gp = gpar(col = "red"))gxa <- editGrob(gxa, gPath = "labels", gp = gpar(col = "green"))gxa <- editGrob(gxa, at = c(0.0, 0.5, 1.0))gxa <- editGrob(gxa, gPath = "labels", gp = gpar(col = "black"), rot = 30)grid.draw(gxa)@\begin{center}{\includegraphics[width=3in, height=1in]{interactive-fig5}}\end{center}@The above examples describe how to perform editing on a grid objectand have the changes updated on screen. The equivalent can be doneentirely ``off-screen'', by just working with the grid object.The off-screen equivalent in this case would look like:<<results=hide>>=gxa <- xaxisGrob(at = 1:4/5, vp = viewport(w = .5, h = .01))gxa <- editGrob(gxa, gp = gpar(col = "red"))gxa <- editGrob(gxa, gPath = "labels", gp = gpar(col = "green"))gxa <- editGrob(gxa, at = c(0.0, 0.5, 1.0))gxa <- editGrob(gxa, gPath = "labels", gp = gpar(col = "black"), rot = 30)grid.draw(gxa)@\end{document}