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?
For me worked the example from the oce library: http://finzi.psych.upenn.edu/library/oce/html/plotInset.html
See the example:
use
par("plt")
to find out the area of the plotting region (seems to be similar to vincents answer). Strangely: fig sets the size of the plotting area of the inset. So, if show the axis, the size of the inset will be larger than your 25%.You can use
par("usr")
to get the limits of the plot, in user coordinates, andgrconvert[XY]
to convert them to normalized device coordinates (NDC, between 0 and 1), before using them withpar(fig=...)
.Look at the
subplot
function in the TeachingDemos package. It may make what you are trying to do easier.Here is an example: