2016-01-06 13 views
11

Próbowałem wygenerować serię wykresów punktowych razem przy użyciu facet_grid. Robiąc to zauważyłem, że geom_dotplot nie reaguje na argument facet_grid's scale = "free_y".ggplot2: Brak wolnych osi wagi podczas korzystania z geom_dotplot z facet_grid

Oto przykładowy kod:

require(ggplot2) 

#Example data 
set.seed(3) 
df = data.frame(Gene = rep(c("a", "b", "c", "d"), each=20), 
       ToD = rep(c("Morning", "Evening"), times = 40), 
       Expression = c(runif(20, min=0, max=10), 
           runif(20, min=0, max=1), 
           runif(20, min=0, max=1000), 
           runif(20, min=0, max=100))) 

#Box plots of example data 
ggplot(df, aes(x = ToD, y = Expression)) + 
    geom_boxplot() + 
    facet_grid(Gene ~ ., scales = "free_y") 

#Dot plots of example data 
ggplot(df, aes(x = ToD, y = Expression)) + 
    geom_dotplot(binaxis = "y", stackdir = "centerwhole") + 
    facet_grid(Gene ~ ., scales = "free_y") 

A oto wersje R i ggplot2 obecnie używam:

  • R w wersji 3.2.2 (14.08.2015)
  • ggplot2_1.0.1.9003

Więc kiedy generowania wykresów skrzynkowych, wszystko działa zgodnie z oczekiwaniami z osi y skalowanie odpowiednio dla każdego wiersza fasetowanie:

Box plots of test data

Jednak wykresy dot utrzymać te same łuski oś Y dla każdego fasetowanie rzędu:

Dot plots of test data

Czytałem o znanej bug w ggplot2 gdzie coord_flip i facet_grid nie współdziałają podczas określania wolnych skal. Czy jest to związane z tym samym problemem?

Chociaż mogłem wygenerować każdy z działek indywidualnie, a następnie połączyć je z grid.arrange, jest to uciążliwe dla moich celów. Próbuję wyrównać te wykresy punktowe z innymi działkami fasetowanymi i chciałbym uniknąć konieczności ponownego generowania wszystkich tych przy użyciu grid.arrange. jakieś pomysły?

Dziękuję za pomoc, którą możesz zaoferować, i daj mi znać, jeśli będę mógł udzielić dalszych wyjaśnień.

+0

I był w stanie powtórzyć błędu z '' ggplot2_1.0.1' i R w wersji 3.2.2 (2015-08-14) ', działa dobrze dla mnie – mlegge

+0

Właśnie zaktualizowałem do ggplot2_2.0.0 i nadal mam uruchomiony ten sam problem. Chyba muszę zmienić wersję na niższą? –

+2

Udało mi się zreplikować błąd za pomocą 'ggplot2_2.0.0' i tej samej wersji R – mlegge

Odpowiedz

3

Czytałem dokument pod numerem ?geom_dotplot. Najwyraźniej opcja binpositions może być ustawiona na "wszystkie" (wszystkie dane razem) lub "bygroup"; domyślny. Zatem stosując Gene zarówno w grupie, jak i aspektów, binpositions może się zmieniać i przynajmniej wolna oś y zwracane:

ggplot(df, aes(x = ToD, y = Expression, group=Gene)) + 
    geom_dotplot(binaxis = "y", stackdir = "centerwhole", binpositions="bygroup") + 
    facet_grid(Gene ~ ., scales = "free_y") 

enter image description here

Ale teraz zgrupowanie na osi x zniknął. Nie ma chyba lepsze rozwiązanie, ale grupowanie przez interakcję pomiędzy genem a Tod zdawała się go rozwiązać:

ggplot(df, aes(x = ToD, y = Expression, group=interaction(Gene,ToD))) + 
    geom_dotplot(binaxis = "y", stackdir = "centerwhole", binpositions="bygroup") + 
    facet_grid(Gene ~ ., scales = "free_y") 

enter image description here

+0

Interesujące. Nadal zastanawiam się, czy jest to zamierzona interakcja między funkcjami geom_boxplot i facet_grid (w tym przypadku wydaje się zbyt skomplikowana), lub jeśli jest to błąd. Tak czy inaczej, twoje rozwiązanie rozwiązuje mój obecny problem. Zostawię to otwarte na dzień lub dwa przed zaznaczeniem odpowiedzi, tak aby nie zniechęcić nikogo innego do wniesienia wkładu. Dziękuję Ci. –

Powiązane problemy