ggplot2 plot sin ejes, leyendas, etc.


139

Quiero usar el hexbin del bioconductor (que puedo hacer) para generar un gráfico que llene toda la región de visualización (png): sin ejes, sin etiquetas, sin fondo, sin nada.


1
¿No sería más fácil crear un diagrama hexbin y recortarlo en un editor de imágenes?
joran

3
intentartheme_void()
Brian D

Respuestas:


182

Según mi comentario en la respuesta de Chase, puedes eliminar muchas de estas cosas usando element_blank:

dat <- data.frame(x=runif(10),y=runif(10))

p <- ggplot(dat, aes(x=x, y=y)) + 
        geom_point() +
        scale_x_continuous(expand=c(0,0)) + 
        scale_y_continuous(expand=c(0,0))   

p + 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())

Parece que todavía hay un pequeño margen alrededor del borde del .png resultante cuando guardo esto. Quizás alguien más sepa cómo eliminar incluso ese componente.

(Nota histórica: desde ggplot2 versión 0.9.2 , optsha quedado en desuso. En su lugar, use theme()y reemplace theme_blank()con element_blank()).


1
¡Muchas gracias! También encontré una solución similar en groups.google.com/group/ggplot2/browse_thread/thread/…
user1320487

Comentario al pasar: en algunos casos, theme(axis.ticks=element_blank())no funciona tan bien theme(axis.ticks.x=element_blank()), probablemente sea un error temporal en alguna parte (tengo mi propio conjunto de temas, luego intento anular: solo axis.ticks.xy axis.ticks.yhacer el trabajo)
PatrickT

106

Re: cambio de opciones a tema, etc. (para gente perezosa):

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

59

Las respuestas actuales son incompletas o ineficientes. Aquí está (quizás) la forma más corta de lograr el resultado (usando theme_void():

data(diamonds) # Data example
ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) +
      theme_void() + theme(legend.position="none")

El resultado es:

ingrese la descripción de la imagen aquí


Si está interesado en eliminar las etiquetas , ¿ labs(x="", y="")funciona?

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + 
      labs(x="", y="")

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + theme_void() + theme(legend.position="none", panel.background = element_rect(fill="grey80"), plot.background = element_rect(fill="red"))sugiere que no es 100% vacío
baptiste

Los laboratorios (x = "", y = "") no parecen eliminar los ejes, solo las etiquetas.
miratrix

@miratrix lo siento, mi error. Actualizado.
luchonacho

55
@luchonacho Usa labs(x="",y="")hojas de espacio de títulos de eje porque en realidad hay títulos, simplemente no tienen signos. Para eliminar los títulos de los ejes y el espacio para ellos, es mejor usarlos+ theme(axis.title = element_blank())
Didzis Elferts

66
labs(x = NULL)o xlab(NULL)son otras formas.
PatrickT

42
'opts' is deprecated.

en ggplot2 >= 0.9.2uso

p + theme(legend.position = "none") 

66
Me doy cuenta de que todavía no tienes privilegios de edición, pero si ves otras respuestas mías de ggplot2 que necesitan ser actualizadas re: opts () no dudes en sugerir una edición. Recibiré una notificación y puedo incorporarla yo mismo.
joran

3
xy <- data.frame(x=1:10, y=10:1)
plot <- ggplot(data = xy)+geom_point(aes(x = x, y = y))
plot
panel = grid.get("panel-3-3")

grid.newpage()
pushViewport(viewport(w=1, h=1, name="layout"))
pushViewport(viewport(w=1, h=1, name="panel-3-3"))
upViewport(1)
upViewport(1)
grid.draw(panel)

Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "NULL"
Roman Luštrik

grid.ls () muestra la lista de viewport y objetos
grob

parece que en otra versión de ggplot que estoy usando el nombre del panel es diferente
amaurel

xy <- data.frame (x = 1: 10, y = 10: 1) plot <- ggplot (data = xy) + geom_point (aes (x = x, y = y)) plot panel = grid.get (" panel-3-4 ") grid.newpage () pushViewport (viewport (w = 1, h = 1, name =" layout ")) pushViewport (viewport (w = 1, h = 1, name =" panel-3- 4 ")) upViewport (1) upViewport (1) grid.draw (panel)
amaurel

-1

¿Hace esto lo que quieres?

 p <- ggplot(myData, aes(foo, bar)) + geom_whateverGeomYouWant(more = options) +
 p + scale_x_continuous(expand=c(0,0)) + 
 scale_y_continuous(expand=c(0,0)) +
 opts(legend.position = "none")

se deshace de la leyenda, pero los ejes xey, y la cuadrícula de fondo, todavía están allí
user1320487
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.