Eliminar completamente las etiquetas facet_wrap

84

Me gustaría eliminar por completo las etiquetas de las facetas para crear una especie de efecto de minigráfico , ya que para la audiencia las etiquetas son irrelevantes, lo mejor que se me ocurre es:

library(MASS)
library(ggplot2)
qplot(week,y,data=bacteria,group=ID, geom=c('point','line'), xlab='', ylab='') + 
     facet_wrap(~ID) + 
     theme(strip.text.x = element_text(size=0))

Entonces, ¿puedo deshacerme del strip.background (ahora en blanco) por completo para permitir más espacio para los "minigráficos"?

O alternativamente, ¿hay una mejor manera de obtener este efecto de " minigráfico " para una gran cantidad de series de tiempo con valores binarios como esta?

Sean
fuente

Respuestas:

132

Para ggplot v2.1.0 o superior, use element_blank()para eliminar elementos no deseados:

library(MASS) # To get the data
library(ggplot2)

qplot(
  week,
  y,
  data = bacteria,
  group = ID,
  geom = c('point', 'line'),
  xlab = '',
  ylab = ''
) + 
facet_wrap(~ ID) + 
theme(
  strip.background = element_blank(),
  strip.text.x = element_blank()
)

En este caso, el elemento que está intentando eliminar se llama strip.

Figura ggplot2 sin títulos de panel


Alternativa usando el diseño ggplot grob

En versiones anteriores de ggplot(antes de v2.1.0), el texto de la tira ocupa filas en el diseño de gtable.

element_blank elimina el texto y el fondo, pero no elimina el espacio que ocupaba la fila.

Este código elimina esas filas del diseño:

library(ggplot2)
library(grid)

p <- qplot(
  week,
  y,
  data = bacteria,
  group = ID,
  geom = c('point', 'line'),
  xlab = '',
  ylab = ''
) + 
facet_wrap(~ ID)

# Get the ggplot grob
gt <- ggplotGrob(p)

# Locate the tops of the plot panels
panels <- grep("panel", gt$layout$name)
top <- unique(gt$layout$t[panels])

# Remove the rows immediately above the plot panel
gt = gt[-(top-1), ]

# Draw it
grid.newpage()
grid.draw(gt)
Sandy Muspratt
fuente
¿alguien más está recibiendo Error in apply(strip_mat, 1, max_height) : dim(X) must have a positive length?
PatrickT
25

Estoy usando ggplot2 versión 1 y los comandos requeridos han cambiado. En vez de

ggplot() ... + 
opts(strip.background = theme_blank(), strip.text.x = theme_blank())

ahora usas

ggplot() ... + 
theme(strip.background = element_blank(), strip.text = element_blank())

Para obtener más detalles, consulte http://docs.ggplot2.org/current/theme.html

hibernado
fuente
7

La respuesta actualizada de Sandy parece buena pero, ¿posiblemente se haya vuelto obsoleta por las actualizaciones de ggplot? Por lo que puedo decir, el siguiente código (una versión simplificada de la respuesta original de Sandy) reproduce el gráfico original de Sean sin ningún espacio adicional:

library(ggplot2)
library(grid)
qplot(week,y,data=bacteria,group=ID, geom=c('point','line'), xlab='', ylab='') + 
 facet_wrap(~ID) + 
 theme(strip.text.x = element_blank())

Estoy usando ggplot 2.0.0.

Nicolás G. Reich
fuente
4

Por lo que puedo decir, la respuesta de Sandy es correcta, pero creo que vale la pena mencionar que parece haber una pequeña diferencia entre el ancho de una trama sin facetas y la anchura de una trama sin las facetas.

No es obvio a menos que lo esté buscando, pero si apila gráficos con los diseños de ventana gráfica que Wickham recomienda en su libro, la diferencia se hace evidente.

CW Dillon
fuente
1
¿Puede ampliar esto con un ejemplo?
mnel
Aquí vamos-- Prueba el enlace . Utilizo el conjunto de datos 'diamantes' de ggplot, por lo que debería funcionar para cualquiera. Observe que el margen derecho del gráfico facetado es ligeramente más estrecho que el gráfico sin facetas.
CW Dillon
Esta no es una buena comparación, ya que cambia a facet_grid (con la prueba del panel en el lateral) de facet_wrap (con paneles en la parte superior, en la pregunta del OP). El problema clave es que el texto del panel no es comprimible: si cambia el tamaño de la ventana para el qplot en la pregunta del OP, puede ver fácilmente el problema que puede causar el texto del panel. Dado que el eje x a menudo tiene valores previamente conocidos y el eje y a menudo tiene valores previamente desconocidos, esto es particularmente desafortunado.
MattBagg