setwd("../desktop/user2015/grid-course")

source("formatVPTree.R")

library(lattice)
xyplot(mpg ~ disp, mtcars)

library(grid)

# Listing grobs and viewports
grid.ls()

formatVPTree(current.vpTree())
grid.ls(viewports=TRUE, grobs=FALSE)
grid.ls(viewports=TRUE, fullNames=TRUE)

# Modifying grobs
grid.remove("plot_01.border.panel.1.1")

t <- grid.get("plot_01.ticklabels.bottom.panel.1.1")
names(t)
t$just

grid.edit("plot_01.ticklabels.bottom.panel.1.1",
          just=c("left", "top"))
grid.edit("plot_01.ticks.bottom.panel.1.1",
          gp=gpar(lwd=3))

# Viewport navigation
downViewport("plot_01.toplevel.vp")
grid.rect(gp=gpar(col=NA, fill=rgb(0,1,0,.5)))
downViewport("plot_01.panel.1.1.vp")
grid.rect(gp=gpar(col=NA, fill=rgb(1,0,0,.5)))
upViewport()
grid.rect(gp=gpar(col=NA, fill=rgb(0,0,1,.5)))
upViewport(0)

# Coordinate systems
downViewport("plot_01.panel.1.1.vp")
grid.lines(unit(c(0, 300, 300), c("npc", "native", "native")),
           unit(c(30, 30, 0), c("native", "native", "npc")),
           gp=gpar(lty="dashed", lwd=2))
grid.text("native",
          x=unit(300, "native"), y=unit(30, "native"),
          just=c("left", "bottom"))

grid.lines(unit(c(0, 1, 1), c("npc", "in", "in")),
           unit(c(1, 1, 0), c("cm", "cm", "npc")),
           gp=gpar(lty="dashed", lwd=2))
grid.text("absolute", 
          x=unit(1, "in"), y=unit(1, "cm"),
          just=c("left", "bottom"))

grid.lines(unit(c(0, .75, .75), "npc"),
           unit(c(.5, .5, 0), "npc"),
           gp=gpar(lty="dashed", lwd=2))
grid.text("normalised", 
          x=unit(.75, "npc"), y=unit(.5, "npc"),
          just=c("left", "bottom"))

grid.move.to(unit(1, "npc") - unit(1, "cm"), 1)
grid.line.to(unit(1, "npc") - unit(1, "cm"), 
             unit(1, "npc") - unit(1, "cm"),
             gp=gpar(lty="dashed", lwd=2))
grid.line.to(1, unit(1, "npc") - unit(1, "cm"),
             gp=gpar(lty="dashed", lwd=2))
grid.text("normalised - absolute", 
          x=unit(1, "npc") - unit(1, "cm"), 
          y=unit(1, "npc") - unit(1, "cm"),
          just=c("right", "top"))

# Drawing grobs 
dev.new(width=3, height=3)
grid.segments(1:4/5, 0, 1:4/5, 1, gp=gpar(col="grey"))
grid.text(0:4/5, 
          x=unit(0:4/5, "npc") + unit(1, "mm"),
          y=unit(1, "npc") - unit(1, "mm"),
          just=c("left", "top"),
          gp=gpar(col="grey", cex=.5))
grid.segments(0, unit(seq(50, 200, 50), "native"), 
              1, unit(seq(50, 200, 50), "native"), 
              gp=gpar(col="grey"))
grid.text(seq(0, 200, 50), 
          x=unit(1, "npc") - unit(2, "mm"),
          y=unit(seq(0, 200, 50), "native") - unit(1, "mm"),
          just=c("right", "top"),
          gp=gpar(col="grey", cex=.5))
grid.segments(0, .2, 1, .2, 
              arrow=arrow(type="closed", ends="both",
                          angle=15, length=unit(3, "mm")),
              gp=gpar(col="grey", fill="grey", lwd=3))
tg <- textGrob("3 inches", y=.2, gp=gpar(cex=.5, col="grey"))
grid.rect(y=.2, width=1.2*grobWidth(tg), height=unit(1, "lines"),
          gp=gpar(col=NA, fill="white"))
grid.draw(tg)
grid.rect(x=unit(.2, "npc"), y=unit(100, "native"),
          width=unit(1, "in"), height=unit(1, "lines"))
grid.text("text", x=unit(.2, "npc"), y=unit(100, "native"),
          gp=gpar(col="grey"))

grid.newpage()
grid.circle(x=1:5/6, y=.5, r=1:5/25)

# Creating viewports
grid.newpage()
vp <- viewport(width=.5, height=.5)
pushViewport(vp)
grid.rect(gp=gpar(col=NA, fill="grey80"))

vp2 <- viewport(x=0, y=.5, width=.5, height=.5,
        just=c("left", "bottom"))
pushViewport(vp2)
grid.rect()

grid.newpage()
pushViewport(vp)
print(xyplot(mpg ~ disp, mtcars), newpage=FALSE)

# ggplot2
library(ggplot2)
qplot(disp, mpg, data=mtcars, main="Fast Cars")
grid.ls()

grid.edit("title.2-4-2-4", gp=gpar(col="red"))
grid.remove("title.2-4-2-4")

qplot(disp, mpg, data=mtcars, main="Fast Cars")
formatVPTree(current.vpTree())

downViewport("panel.3-4-3-4")
grid.rect(gp=gpar(col=NA, fill=rgb(0,1,0,.5)))

# vcd
library(vcd)
mosaic(Titanic)
grid.ls()

# gridGraphics
plot(mpg ~ disp, mtcars, pch=16, main="Fast Cars")
library(gridGraphics)
grid.echo()
grid.ls()
formatVPTree(current.vpTree())

# Layouts
grid.newpage()
widths <- unit(c(1, 2, 1), c("null", "null", "cm"))
lay <- grid.layout(3, 3, widths=widths)
vplay <- viewport(layout=lay)
pushViewport(vplay)
pushViewport(viewport(layout.pos.row=2, 
                      layout.pos.col=2))
grid.rect(gp=gpar(col=NA, fill=rgb(1,0,0,.5)))
grid.show.layout(lay)

# Grob width, height, etc ...
grid.newpage()
grid.text("axis label", gp=gpar(col="grey"))
grid.rect(width=stringWidth("axis label"), gp=gpar(fill=NA))

grid.newpage()
grid.text("axis label", name="t")
grid.rect(width=grobWidth("t"))

grid.newpage()
grid.text("label", x=1/3, y=1/3, name="t")
grid.circle(2/3, 2/3, r=unit(1, "mm"),
            gp=gpar(fill="black"))
grid.segments(grobX("t", 0), grobY("t", 0), 2/3, 2/3) 

# gridSVG
library(gridSVG)
grid.newpage()
grid.circle(r=.2, name="c")
grid.filter("c", filterEffect(feGaussianBlur(sd=3)))
grid.export()

 



