R Graphics using the Grid Package Sigal Blay Statistical Genetics Working Group Dept. Of Statistics and Actuarial Science Simon Fraser University January.

Presentation on theme: "R Graphics using the Grid Package Sigal Blay Statistical Genetics Working Group Dept. Of Statistics and Actuarial Science Simon Fraser University January."— Presentation transcript:

R Graphics using the Grid Package Sigal Blay Statistical Genetics Working Group Dept. Of Statistics and Actuarial Science Simon Fraser University January 2006

Grid Low level graphics system Produces editable graphical components (not just graphics output) Object Oriented - graphical components can be reused and recombined

A standard set of graphical primitives: grid.rect(...) grid.lines(...) grid.polygon(...) grid.circle(...) grid.text(...) library(help = grid) for details

For every function of the form grid.* there is an equivalent function *Grob that returns a graphical object but doesn't draw it on the graphics device: grid.rect(...) rectGrob(...) grid.lines(...) linesGrob(...) grid.polygon(...) polygonGrob(...) grid.circle(...) circleGrob(...) grid.text(...) textGrob(..) Usage: Rect <- rectGrob(...) grid.draw(Rect)

Graphical output can be positioned and sized relative to a large number of coordinate systems grid.rect(x = unit(0, “native"), y = unit(1.5, “npc"), height = unit(0.5, "inches"), width = unit(0.8, “lines”)) help(unit) for details

Can specify various graphical parameters grid.rect(gp=gpar(col="red", lwd=2, fill="yellow", lty="dotted")) grid.text(gp=gpar(col="red", fontsize=10, fontface="italic")) help(gpar) for details

Working with viewports All drawing occurs in the current grid viewport, a defined rectangular region with it's own defined coordinate system: vp <- viewport(width=0.5, height=0.2, angle=45) grid.show.viewport(vp) help(viewport) for details

vp <- viewport(width=0.5, height=0.2, angle=45, name="VP") pushViewport(vp) grid.rect() popViewport()

vp <- viewport(width=0.5, height=0.2, angle=45, name="VP") pushViewport(vp) grid.rect() grid.xaxis() grid.yaxis()

vp <- viewport(width=0.5, height=0.2, angle=45, name="VP") pushViewport(vp) grid.rect() grid.xaxis() grid.yaxis() grid.text("viewport region", y = 0.9)

vp <- viewport(width=0.5, height=0.2, angle=45, name="VP") pushViewport(vp) grid.rect() grid.xaxis() grid.yaxis() grid.text("viewport region", y = 0.9) upViewport() grid.text("root region",y = 0.1)

vp <- viewport(width=0.5, height=0.2, angle=45, name="VP") pushViewport(vp) grid.rect() grid.xaxis() grid.yaxis() grid.text("viewport region", y = 0.9) upViewport() grid.text("root region",y = 0.1) grid.text("more text", vp="VP“ y=0.7)

Query the viewport tree > current.viewport() viewport[ROOT] > current.vpTree() viewport[ROOT]->(viewport[VP]) > downViewport("VP") > popViewport() > current.vpTree() viewport[ROOT]

Can push multiple viewport pushViewport(vpList(vp1, vp2, vp3)) Can push nested viewports pushViewport(vpStack(vp1, vp2, vp3)) pushViewport(vpTree(vp1, vpList(vp2, vp3))) Can integrate with a layout

plotViewport(...) a convenience function for producing a viewport with a central plot region surrounded by margins given in terms of a number of lines of text. dataViewport(...) a convenience function for producing a viewport with x- and/or y-scales based on numeric values passed to the function.

grid creates graphical objects ( grobs ): grid.rect(..., name="box") grid.circle(...) grid.edit("box", gp=gpar(fill="yellow")) grid.remove("box") 

gTree – a tree of grobs vp<-viewport(..., name="view") x <- xaxisGrob(name = "axis1") y <- yaxisGrob(name = "axis2") points <- pointsGrob(1:9, 1:9, name="dataPoints") title <- textGrob(..., name="myTitle") tree <- gTree(name="Tree”, vp=vp, children=gList(x,y,title,points)) grid.draw(tree)

Query and edit a gTree > getNames() # list all top-level grobs [1] "Tree“ > childNames(tree) [1] "axis1" "axis2" "myTitle“ "dataPoints" > childNames(grid.get("Tree")) [1] "axis1" "axis2" "myTitle“ "dataPoints" > grid.add("Tree", grid.rect()) > grid.edit(gPath("Tree","dataPoints"), pch=2)

Example: LDheatmap package Plots measures of pairwise linkage disequilibria for SNPs

> getNames() [1] "ldheatmap" > childNames(grid.get("ldheatmap")) [1] "heatMap" "geneMap" "Key“ > childNames(grid.get("heatMap")) [1] "heatmap" "title" > childNames(grid.get("geneMap")) [1] "diagonal" "segments" "title" "symbols“ "SNPnames" > childNames(grid.get("Key")) [1] "colorKey" "title" "labels" "ticks” "box"

grid.edit("symbols", pch=20, gp=gpar(cex=2)) grid.edit(gPath("ldheatmap","heatMap","title"), gp=gpar(col="red")) grid.edit(gPath("ldheatmap","heatMap","heatmap“), gp=gpar(col="white", lwd=2)) 

Conclusion the R grid package enables the production of reusable and flexible graphical components

Further reading R Graphics / Paul Murrell

Download ppt "R Graphics using the Grid Package Sigal Blay Statistical Genetics Working Group Dept. Of Statistics and Actuarial Science Simon Fraser University January."

Similar presentations