Całkowicie usuń etykiety facet_wrap


86

Chciałbym całkowicie usunąć etykiety z aspektów, aby stworzyć coś w rodzaju miniatury , ponieważ dla odbiorców etykiety są nieistotne, najlepsze, co mogę wymyślić, to:

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 całkowicie pozbyć się (teraz pustego) strip.background, aby zapewnić więcej miejsca na „wykresy przebiegu w czasie”?

Albo czy jest lepszy sposób na uzyskanie efektu „ wykresu przebiegu w czasie ” dla dużej liczby szeregów czasowych o wartości binarnej, takich jak ten?

Odpowiedzi:


135

W przypadku ggplot w wersji 2.1.0 lub nowszej użyj element_blank()do usunięcia niechcianych elementów:

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 wywoływany jest element, który próbujesz usunąć strip.

Rysunek ggplot2 bez tytułów paneli


Alternatywa przy użyciu układu grob ggplot

W starszych wersjach ggplot(przed wersją 2.1.0) pasek tekstowy zajmuje wiersze w układzie gtable.

element_blank usuwa tekst i tło, ale nie usuwa miejsca zajmowanego 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)

ktoś inny dostaje Error in apply(strip_mat, 1, max_height) : dim(X) must have a positive length?
— PatrickT

25

Używam programu ggplot2 w wersji 1 i wymagane polecenia uległy zmianie. Zamiast

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

teraz używasz

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

Więcej szczegółów można znaleźć pod adresem http://docs.ggplot2.org/current/theme.html


8

Zaktualizowana odpowiedź Sandy wydaje się dobra, ale może została unieważniona przez aktualizacje ggplot? Z tego, co mogę powiedzieć, następujący kod (uproszczona wersja oryginalnej odpowiedzi Sandy'ego) odtwarza oryginalny wykres Seana bez dodatkowej spacji:

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.


4

O ile wiem, odpowiedź Sandy jest prawidłowa, ale myślę, że warto wspomnieć, że wydaje się, że istnieje niewielka różnica między szerokością działki bez fasetek a szerokością działki bez fasetek.

Nie jest to oczywiste, chyba że tego szukasz, ale jeśli układasz wykresy przy użyciu układów rzutni, które Wickham zaleca w swojej książce, różnica staje się widoczna.


1
Czy możesz to rozwinąć na przykładzie?
— mnel

Zaczynamy - wypróbuj link . Używam zestawu danych „diamentów” ggplot, więc powinien działać dla każdego. Zwróć uwagę, że prawy margines wykresu fasetowego jest nieco węższy niż wykres nieakreślony.
— CW Dillon,

To nie jest dobre porównanie, ponieważ przełącza się na facet_grid (z testem panelu z boku) z facet_wrap (z panelami na górze, w pytaniu OP). Kluczową kwestią jest to, że tekst panelu nie daje się kompresować: jeśli zmienisz rozmiar okna dla qplot w pytaniu OP, możesz łatwo zobaczyć problem, jaki może spowodować tekst panelu. Ponieważ oś X ma często znane wcześniej wartości, a oś Y często ma nieznane wcześniej wartości, jest to szczególnie niefortunne.
— MattBagg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.