106 votes

Supprimer complètement les étiquettes facet_wrap

J'aimerais supprimer complètement les étiquettes des facettes pour créer une sorte de sparkline En effet, pour le public, les étiquettes ne sont pas pertinentes, le mieux que je puisse faire est de dire :

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

Puis-je donc me débarrasser complètement de la bande (maintenant vide) strip.background pour laisser plus d'espace aux "sparklines" ?

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

168voto

Sandy Muspratt Points 5682

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 ggplot grob layout

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

element_blank supprime le texte et le fond, mais ne supprime pas l'espace que la ligne occupait.

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)

27voto

hibernado Points 1321

J'utilise la version 1 de ggplot2 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

9voto

Nicholas G Reich Points 352

La réponse mise à jour de Sandy semble bonne, mais elle 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.

4voto

CW Dillon Points 121

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

Ce n'est pas évident, à moins de le chercher, mais si vous empilez les tracés en utilisant les mises en page des fenêtres d'affichage que Wickham recommande dans son livre, la différence devient évidente.

1 votes

Pouvez-vous développer ce point à l'aide d'un exemple ?

0 votes

C'est parti Essayez lien . J'utilise l'ensemble de données 'diamonds' de ggplot, donc cela devrait fonctionner pour tout le monde. Remarquez que la marge droite du graphique à facettes est légèrement plus étroite que celle du graphique sans facettes.

0 votes

Ce n'est pas une bonne comparaison puisqu'elle passe de facet_wrap (avec les panneaux sur le dessus, dans la question de l'OP) à facet_grid (avec les panneaux sur le côté). Le problème principal est que le texte du panneau n'est pas compressible : si vous redimensionnez la fenêtre du qplot dans la question de l'OP, vous pouvez facilement voir le problème que le texte du panneau peut causer. Étant donné que l'axe des x a souvent des valeurs connues auparavant et que l'axe des y a souvent des valeurs inconnues auparavant, c'est particulièrement malheureux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X