tutorial studio ggplot funciones descargar r ggplot2 r-grid

studio - ggplot2 tutorial



Agregar una ventana transparente/ojo de cerradura ggplot2(cuadrĂ­cula) (3)

A veces es útil usar una técnica para agregar una capa gris semitransparente a una imagen y luego cortar un ojo de cerradura en esa capa para resaltar una cierta parte de la imagen a continuación. Aquí hay un ejemplo de un videojuego de youtube :

A veces lo hago con gráficos, pero uso Inkscape para agregar una capa semitransparente y luego uso el borrador para cortar un agujero en esa capa. Este (a) parece menos que profesional (b) requiere tiempo adicional y un programa separado y (c) posible pérdida de calidad.

Quiero hacerlo en R. Estoy preguntando por ggplot2 porque esta es mi herramienta preferida, pero creo que cualquier respuesta de cuadrícula sería buena (sé que la base probablemente tiene un enfoque muy diferente).

Así que aquí hay un MWE en el que he agregado un geom_rect para mostrar dónde queremos cortar el ojo de la cerradura / ventana:

ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3) + geom_rect(mapping=aes(xmin=20, xmax=25, ymin=3, ymax=3.3), color="black", alpha=.01)

¿Cómo puedo usar R para hacer una trama que se parece a esto?


¿Qué tal lo siguiente?

P <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3) ## Set the limits for x & y xlims <- c(20, 25) ylims <- c(3, 3.3) # Where P is the original plot P + geom_rect(mapping=aes(xmin=-Inf, xmax=min(xlims), ymin=-Inf, ymax=+Inf), fill="black", alpha=.01) + geom_rect(mapping=aes(xmin=min(xlims), xmax=+Inf, ymin=max(ylims), ymax=+Inf), fill="black", alpha=.01) + geom_rect(mapping=aes(xmin=min(xlims), xmax=+Inf, ymin=-Inf, ymax=min(ylims)), fill="black", alpha=.01) + geom_rect(mapping=aes(xmin=max(xlims), xmax=+Inf, ymin=min(ylims), ymax=max(ylims)), fill="black", alpha=.01)


Resulta que puedes hacer esto con grid.path(...) en el paquete de grid . Lea la documentation para ver cómo crear una ruta con un agujero en ella.

library(gridExtra) library(ggplot2) ggp <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3) grid.newpage() grid.draw(arrangeGrob(ggp)) grid.path(c(0,0,1,1,.48,.48,.62,.62), c(0,1,1,0,.43,.50,.50,.43), id=rep(1:2, each=4), rule="evenodd",gp=gpar(fill="black", alpha=0.6))

NB: grid.draw(...) y grid.path(...) están en el paquete de grid ; arrangeGrob(...) está en el paquete gridExtra . Cargando gridExtra hace que se cargue la grid . Gracias a @MartinBel por sugerir la edición.

En respuesta al comentario de @BrandonBertelsen: grid.path(...) es agnóstico sobre la forma; Sólo tienes que proporcionar las coordenadas.

center <- c(x=0.55,y=0.48) r <- 0.1 circle <- do.call(rbind,lapply(seq(0,2*pi,length=36), function(th)c(x=r*cos(th),y=r*sin(th)))) circle <- data.frame(circle) circle$x <- circle$x + center["x"] circle$y <- circle$y + center["y"] ggp <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3) grid.newpage() grid.draw(arrangeGrob(ggp)) grid.path(c(0,0,1,1,circle[,1]), c(0,1,1,0,circle[,2]), id=c(1,1,1,1,rep(2,nrow(circle))), rule="evenodd",gp=gpar(fill="black", alpha=0.6))

El "círculo" es una elipse debido a la relación de aspecto de la ventana de trazado.

Más información: No es lo que dibujas, es lo que no dibujas por Paul Murrell en el R Journal


require(ggplot2) #represent some tiles based on your axes (10 x 10, by 1) deoending on resolution you want alpha_tiles<-expand.grid(x=0:10,y=0:10,a=0.6) #set alpha to 0 for the coordinate alpha_tiles[alpha_tiles$x %in% 7:9 & alpha_tiles$y==7,]$a<-0 qplot(0:10,0:10, size=10, color="red") + theme_bw() + geom_raster(data=alpha_tiles,aes(x=x,y=y), alpha=alpha_tiles$a, fill="grey")

o esto para una respuesta más completa que deja en blanco toda la trama:

require(ggplot2) #represent some tiles based on your axes (here 100 x 100, by 1) depending on resolution you want resolution<-100 alpha_tiles<-expand.grid(x=0:resolution,y=0:resolution,a=0.6) #set alpha to 0 for the coordinates to highlight alpha_tiles[alpha_tiles$x %in% 40:70 & alpha_tiles$y %in% 70:80,]$a<-0 alpha_tiles[alpha_tiles$x %in% 10:30 & alpha_tiles$y %in% 10:25,]$a<-0 p<-qplot(0:10,0:10, size=10, color="red") + theme_bw() # background plot qplot(0:resolution,0:resolution,geom="blank") + theme(axis.line=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank(), legend.position="none", panel.background=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank()) + annotation_custom(ggplotGrob(p),0,resolution,0,resolution) + geom_raster(data=alpha_tiles,aes(x=x,y=y), alpha=alpha_tiles$a, fill="grey")