web-dev-qa-db-fra.com

Supprimer complètement les étiquettes facet_wrap

Je voudrais supprimer complètement les étiquettes des facettes pour créer une sorte d'effet sparkline, car pour le public, les étiquettes ne sont pas pertinentes, le mieux que je puisse trouver est:

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

Alors, puis-je me débarrasser complètement du strip.background (maintenant vide) pour laisser plus d'espace aux "sparklines"?

Ou bien existe-t-il un meilleur moyen d'obtenir cet effet "sparkline" pour un grand nombre de séries temporelles à valeur binaire comme celle-ci?

57
Sean

Pour ggplot v2.1.0 ou supérieur, utilisez element_blank() pour supprimer les éléments indésirables:

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

Dans ce cas, l'élément que vous essayez de supprimer s'appelle strip.

ggplot2 figure without panel titles


Alternative utilisant la disposition gobplot grob

Dans les anciennes versions de ggplot (avant la v2.1.0), le texte de la bande occupe des lignes dans la disposition gtable.

element_blank supprime le texte et l'arrière-plan, mais il ne supprime pas l'espace occupé par la ligne.

Ce code supprime ces lignes de la mise en page:

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)
89
Sandy Muspratt

J'utilise ggplot2 version 1 et les commandes requises ont changé. Au lieu de

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

vous utilisez maintenant

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

Pour plus de détails, voir http://docs.ggplot2.org/current/theme.html

24
hibernado

La réponse mise à jour de Sandy semble bonne, mais a peut-être été rendue obsolète par les mises à jour de ggplot? D'après ce que je peux dire, le code suivant (une version simplifiée de la réponse originale de Sandy) reproduit le graphique original de Sean sans espace supplémentaire:

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

J'utilise ggplot 2.0.0.

4
Nicholas G Reich

Pour autant que je sache, la réponse de Sandy est correcte, mais je pense qu'il convient de mentionner qu'il semble y avoir une petite différence entre la largeur d'une parcelle sans facettes et la largeur d'une parcelle avec les facettes supprimées.

Ce n'est pas évident à moins que vous ne le cherchiez mais, si vous empilez des parcelles en utilisant les dispositions de fenêtre que Wickham recommande dans son livre, la différence devient apparente.

4
CW Dillon