Entfernen Sie die facet_wrap-Etiketten vollständig

84

Ich möchte die Beschriftungen für die Facetten vollständig entfernen, um eine Art Sparkline- Effekt zu erzielen, da die Beschriftungen für das Publikum irrelevant sind. Das Beste, was ich mir einfallen lassen kann, ist:

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

Kann ich den (jetzt leeren) strip.background vollständig entfernen, um mehr Platz für die "Sparklines" zu schaffen?

Oder gibt es alternativ einen besseren Weg, um diesen " Sparkline " -Effekt für eine große Anzahl von Zeitreihen mit binären Werten wie diese zu erzielen?

Sean
quelle

Antworten:

132

Verwenden Sie für ggplot v2.1.0 oder höher, element_blank()um unerwünschte Elemente zu entfernen:

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

In diesem Fall wird das Element aufgerufen, das Sie entfernen möchten strip.

ggplot2 Figur ohne Paneltitel


Alternative mit ggplot grob layout

In älteren Versionen von ggplot(vor v2.1.0) belegt der Streifentext Zeilen im gtable-Layout.

element_blank Entfernt den Text und den Hintergrund, aber nicht den Platz, den die Zeile einnimmt.

Dieser Code entfernt diese Zeilen aus dem Layout:

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
quelle
jemand anderes bekommen Error in apply(strip_mat, 1, max_height) : dim(X) must have a positive length?
PatrickT
25

Ich verwende ggplot2 Version 1 und die erforderlichen Befehle haben sich geändert. Anstatt

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

Sie verwenden jetzt

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

Weitere Informationen finden Sie unter http://docs.ggplot2.org/current/theme.html

Hibernado
quelle
7

Sandys aktualisierte Antwort scheint gut zu sein, wurde aber möglicherweise durch Aktualisierungen von ggplot überholt? Nach allem, was ich sagen kann, gibt der folgende Code (eine vereinfachte Version von Sandys ursprünglicher Antwort) Seans Originaldiagramm ohne zusätzlichen Platz wieder:

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

Ich benutze ggplot 2.0.0.

Nicholas G Reich
quelle
4

Soweit ich das beurteilen kann, ist Sandys Antwort richtig, aber ich denke, es ist erwähnenswert, dass es einen kleinen Unterschied zwischen der Breite eines Diagramms ohne Facetten und der Breite eines Diagramms ohne entfernte Facetten zu geben scheint.

Es ist nicht offensichtlich, es sei denn, Sie suchen danach, aber wenn Sie Diagramme mit den von Wickham in seinem Buch empfohlenen Layouts für Ansichtsfenster stapeln, wird der Unterschied offensichtlich.

CW Dillon
quelle
1
Können Sie dies anhand eines Beispiels erläutern?
mnel
Los geht's - Link versuchen . Ich verwende den 'Diamonds'-Datensatz des ggplot, damit er für jeden funktioniert. Beachten Sie, dass der rechte Rand des facettierten Diagramms etwas schmaler ist als das nicht facettierte Diagramm.
CW Dillon
Dies ist kein guter Vergleich, da von facet_wrap (mit Panels oben in der OP-Frage) zu facet_grid (mit Panel-Test an der Seite) gewechselt wird. Das Hauptproblem ist, dass der Panel-Text nicht komprimierbar ist: Wenn Sie die Größe des Fensters für das qplot in der OP-Frage ändern, können Sie das Problem, das der Panel-Text verursachen kann, leicht erkennen. Da die x-Achse häufig zuvor bekannte Werte und die y-Achse häufig zuvor unbekannte Werte aufweist, ist dies besonders unglücklich.
MattBagg