subplots graphs add_lines r plot insets

graphs - subplot r



¿Cómo agregar un recuadro(subparcela) a "topright" de un diagrama R? (4)

Me gustaría tener un recuadro dentro de un diagrama que represente el 25% del ancho y la altura del área de trazado (área donde están los gráficos).

Lo intenté:

# 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

Esto coloca el recuadro completamente a la vista y también usa el 25% del ancho del dispositivo. ¿Cómo puedo cambiarlo a las coordenadas y el ancho del área donde están los gráficos?


Puede usar par("usr") para obtener los límites de la gráfica, en coordenadas de usuario, y grconvert[XY] para convertirlas a coordenadas de dispositivo normalizadas (NDC, entre 0 y 1), antes de usarlas con par(fig=...) .

plot(d0) u <- par("usr") v <- c( grconvertX(u[1:2], "user", "ndc"), grconvertY(u[3:4], "user", "ndc") ) v <- c( (v[1]+v[2])/2, v[2], (v[3]+v[4])/2, v[4] ) par( fig=v, new=TRUE, mar=c(0,0,0,0) ) plot(d0_inset, axes=FALSE, xlab="", ylab="") box()


use par("plt") para averiguar el área de la región de trazado (parece ser similar a la respuesta de vincents). Extrañamente: fig establece el tamaño del área de trazado del recuadro. Entonces, si muestra el eje, el tamaño del recuadro será mayor que su 25%.

# 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) # calculate position of inset plotdim <- par("plt") xleft = plotdim[2] - (plotdim[2] - plotdim[1]) * 0.25 xright = plotdim[2] # ybottom = plotdim[4] - (plotdim[4] - plotdim[3]) * 0.25 # ytop = plotdim[4] # # set position for inset par( fig = c(xleft, xright, ybottom, ytop) , mar=c(0,0,0,0) , new=TRUE ) # add inset plot(d0_inset, col=2) # inset bottomright


Mire la función de subplot en el paquete TeachingDemos. Puede hacer que lo que está tratando de hacer sea más fácil.

Aquí hay un ejemplo:

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) )


Para mí trabajó el ejemplo de la biblioteca de oce: http://finzi.psych.upenn.edu/library/oce/html/plotInset.html

Mira el ejemplo:

library(oce) ## power law in linear and log form x <- 1:10 y <- x^2 plot(x, y, log=''xy'',type=''l'') plotInset(3, 1, 10, 8, expr=plot(x,y,type=''l'',cex.axis=3/4,mgp=c(3/2,1/2,0)), mar=c(2.5,2.5,1,1)) ## CTD data with location data(ctd) plot(ctd, which="TS") plotInset(29.9, 2.7, 31, 10, expr=plot(ctd, which=''map'', coastline="coastlineWorld", span=5000, mar=NULL, cex.axis=3/4))