| % 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 object |
| so 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 for |
| writing 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 happens |
| because new labels are created by the axis and these ``inherit'' |
| the colour of the axis by default. In other words, the |
| colour specification of the old labels was specific to the old labels |
| and 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 object |
| and have the changes updated on screen. The equivalent can be done |
| entirely ``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} |
| |