2012-05-11 19 views
34

Chciałbym usunąć etykiety na aspektach kompletnie stworzyć rodzaj sparkline efektu, jak na widowni etykiety są nieistotne, co mogę wymyślić to:całkowicie usunąć

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

Czy mogę więc pozbyć się (teraz pustego) paska strip.background, aby uzyskać więcej miejsca na "wykresy przebiegu"?

A może jest lepszy sposób na uzyskanie efektu "sparkline" dla dużej liczby serii wartości binarnych, takich jak ta?

Odpowiedz

55

Dla v2.1.0 ggplot lub wyższej, należy element_blank() usunąć niechciane elementy:

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

W tym przypadku element starasz się usunąć nazywa strip.

ggplot2 figure without panel titles


alternatywna użyciu ggplot układ Grob

W starszych wersjach ggplot (przed v2.1.0), tekst Listwa zajmuje wierszy w gtable układzie.

element_blank usuwa tekst i tło, ale nie usuwa przestrzeni zajmowanej przez wiersz.

Ten kod usuwa te wiersze z układu:

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

ktoś inny otrzymujący komunikat "Błąd w zastosowaniu (strip_mat, 1, max_height): dim (X) musi mieć dodatnią długość" "? – PatrickT

4

tak blisko, jak mogę powiedzieć, odpowiedź Sandy jest poprawna, ale myślę, że warto wspomnieć, że nie wydaje się być niewielka różnica szerokość działki bez faset i szerokości wątku z usuniętymi fasetkami.

Nie jest to oczywiste, chyba że tego szukasz, ale jeśli ułożysz wykresy na stosach, które Wickham zaleca w swojej książce, różnica staje się widoczna.

+1

Czy możesz to wyjaśnić na przykładzie? – mnel

+0

Hmm. Zobaczmy ... –

+0

Tutaj mamy - Spróbuj [link] (http: // pastebin.com/xJedJr1b). Używam zestawu danych "diamenty" ggplot, więc powinien on działać dla każdego. Zauważ, że prawy margines fasetowanego wykresu jest nieco węższy niż nie odwzorowany wykres. –

19

Używam ggplot2 w wersji 1, a wymagane polecenia uległy zmianie. Zamiast

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

teraz używać

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

Więcej szczegółów patrz http://docs.ggplot2.org/current/theme.html

2

Sandy zaktualizowane odpowiedź wydaje się dobre, ale prawdopodobnie został stały się nieaktualne aktualizacjach ggplot? Z tego co mogę powiedzieć następujący kod (uproszczona wersja oryginalnej odpowiedzi Sandy) odtwarza oryginalny wykres Seana bez jakiejkolwiek dodatkowej przestrzeni:

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

Używam ggplot 2.0.0.

Powiązane problemy