Search code examples
rplotlatticelevelplot

R: How should I create Grid-graphics?


Goal

enter image description here

Code

require(lattice)

png('my_typing.png')
par(mfrow=c(2,1))

read.csv('race_data.csv')->sol
plot(sol$Race.., sol$WPM*sol$Accuracy, type='l')

# TODO: it wrongly substitutes the plot with levelplot
# TODO: I want two plots one below another, plot and then levelplot below
levelplot(cor(sol[1:5]))

Helper questions

  1. How can I plot the normal plot and the special plot together in one PNG -file?

  2. Should I combine different plotting -packages such as lattice and grid to base?


Solution

  • The gridBase package which provides some support for combining grid and base graphics output.

    Here is a simple example:

    library("grid")
    library("gridBase")
    library("lattice")
    
    # example from levelplot help page
    x <- seq(pi/4, 5 * pi, length.out = 100)
    y <- seq(pi/4, 5 * pi, length.out = 100)
    r <- as.vector(sqrt(outer(x^2, y^2, "+")))
    g <- expand.grid(x=x, y=y)
    g$z <- cos(r^2) * exp(-r/(pi^3))
    p <- levelplot(z~x*y, g, cuts = 50, scales=list(log="e"), xlab="",
                   ylab="", main="lattice levelplot",
                   colorkey=FALSE, region=TRUE)
    
    grid.newpage()
    pushViewport(viewport(layout=grid.layout(2, 1,
                                             heights=unit(c(2, 1), "null"))))
    vp <- pushViewport(viewport(layout.pos.row=1, layout.pos.col=1))
    par(omi=gridOMI())
    # base graphics
    plot(1:10, main="base graphics plot")
    popViewport()
    # lattice plot
    vp <- pushViewport(viewport(layout.pos.row=2, layout.pos.col=1))
    print(p, vp=vp, newpage=FALSE)
    popViewport()
    popViewport()
    

    gridBase example