2012-05-11 18 views
34

mi piacerebbe rimuovere le etichette per le sfaccettature del tutto per creare una sorta di sparkline effetto, come per il pubblico le etichette sono irrilevanti, il meglio che posso venire in mente è:rimuovere le etichette facet_wrap completamente

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

Così posso eliminare completamente il (strip) sfondo (ora vuoto) per consentire più spazio per le "linee luminose"?

Oppure, in alternativa c'è un modo migliore per ottenere questo "sparkline" effetto per un gran numero di binario valutate serie temporali come questo?

risposta

55

Per v2.1.0 ggplot o superiore, utilizzare element_blank() per rimuovere elementi indesiderati:

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 questo caso, l'elemento che si sta cercando di rimuovere è chiamato strip.

ggplot2 figure without panel titles


alternativo utilizzando il layout ggplot Grob

Nelle versioni precedenti di ggplot (prima v2.1.0), il testo striscia occupa le righe nel layout gtable.

element_blank rimuove il testo e lo sfondo, ma non rimuove lo spazio occupato dalla riga.

Questo codice rimuove le righe dal 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) 
+0

chiunque altro ottiene '' Errore nell'applicare (strip_mat, 1, max_height): dim (X) deve avere una lunghezza positiva''? – PatrickT

4

Vicino come posso dire, la risposta di Sandy è corretto, ma penso che sia la pena ricordare che ci sembra essere una piccola differenza della larghezza di un complotto senza sfaccettature e la larghezza di una trama con le sfaccettature rimosse.

Non è ovvio a meno che non lo stiate cercando ma, se impilate i grafici usando i layout di viewport che Wickham raccomanda nel suo libro, la differenza diventa evidente.

+1

Puoi approfondire questo con un esempio? – mnel

+0

Hmm. Vediamo ... –

+0

Qui andiamo-- Prova [link] (http: // pastebin.com/xJedJr1b). Io uso il dataset "diamanti" di ggplot, quindi dovrebbe funzionare per chiunque. Si noti che il margine destro del grafico sfaccettato è leggermente più stretto rispetto al grafico sfocato. –

19

Sto utilizzando ggplot2 versione 1 ed i comandi richiesti sono stati modificati. Invece di

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

è ora possibile utilizzare

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

Per ulteriori dettagli si veda la risposta aggiornato http://docs.ggplot2.org/current/theme.html

2

di Sandy sembra buona, ma, forse è stato reso obsolete aggiornamenti ggplot? Da quello che posso dire il seguente codice (una versione semplificata di risposta originale di Sandy) riproduce grafico originale di Sean senza alcun spazio extra:

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

Sto usando ggplot 2.0.0.

Problemi correlati