rplotinsets

How to add an inset (subplot) to "topright" of an R plot?


I'd like to have an inset within a plot that makes up 25% of the width and height of the plotting area (area where the graphs are).

I tried:

# datasets
d0 <- data.frame(x = rnorm(150, sd=5), y = rnorm(150, sd=5))
d0_inset <- data.frame(x = rnorm(1500, sd=5), y = rnorm(1500, sd=5))

# ranges
xlim <- range(d0$x)
ylim <- range(d0$y)

# plot
plot(d0)

# add inset
par(fig = c(.75, 1, .75, 1), mar=c(0,0,0,0), new=TRUE)
plot(d0_inset, col=2) # inset bottomright

This puts the inset to absolute topright and also uses 25% of the device-width. How can I change it to the coordinates and width of the area where the graphs are?


Solution

  • Look at the subplot function in the TeachingDemos package. It may make what you are trying to do easier.

    Here is an example:

    library(TeachingDemos)
    d0 <- data.frame(x = rnorm(150, sd=5), y = rnorm(150, sd=5))
    d0_inset <- data.frame(x = rnorm(1500, sd=5), y = rnorm(1500, sd=5))
    
    plot(d0)
    subplot( 
      plot(d0_inset, col=2, pch='.', mgp=c(1,0.4,0),
        xlab='', ylab='', cex.axis=0.5), 
      x=grconvertX(c(0.75,1), from='npc'),
      y=grconvertY(c(0,0.25), from='npc'),
      type='fig', pars=list( mar=c(1.5,1.5,0,0)+0.1) )
    

    enter image description here