Chcę utworzyć tablicę 2x4 wykresów, które pokazują zmiany zmieniające się w czasie. Domyślna konfiguracja ggplot
z facet_wrap
polega na tym, że górny wiersz ma serię 1 & 2, drugi wiersz ma serię 3 & 4 itd. Chciałbym to zmienić, aby pierwsza kolumna miała serię w kolejności (1-> 2-> 3-> 4), a następnie druga kolumna ma następną serię 4. W ten sposób oko może porównywać bezpośrednio sąsiednie rozkłady w czasie w pionie (jak myślę, że powinny być).Jak zmienić porządek z wiersza na kolumnę z facet_wrap?
Odpowiedz
Wygląda na to trzeba to zrobić z czynnika zamawiania uprzedniej do wywołania facet_wrap:
fac <- factor(fac, levels=as.character(c(1, 10, 2, 20, 3, 30, 4, 40)))
Domyślna for AS/tabeli w facet_wrap
jest TRUE, która ma zamiar umieścić najniższą wartość ("1 "w tym przypadku) w lewym górnym rogu i najwyższej wartości (" 40 "w powyższym przykładzie) w prawym dolnym rogu. A więc:
pl + facet_wrap(~fac, ncol=2, nrow=4)
Twoje komentarze sugerują, że pracujesz z liczbowymi zmiennymi klasy. (Wasze komentarze wciąż nie stanowią przykładowego przykładu i wydaje się, że to jest nasza odpowiedzialność, a nie wasza.) Gdzie można uzyskać takie wyobrażenia o uprawnieniach?) Powinno to stworzyć czynnik, który może być "kolumną główną" uporządkowaną z numeryczną wejście czynnik:
> ss <- 1:8; factor(ss, levels=ss[matrix(ss, ncol=2, byrow=TRUE)])
[1] 1 2 3 4 5 6 7 8
Levels: 1 3 5 7 2 4 6 8
z drugiej strony mogę myśleć o sytuacjach, w których może to być skuteczne podejście:
> ss <- 1:8; factor(ss, levels=ss[matrix(ss, nrow=2, byrow=TRUE)])
[1] 1 2 3 4 5 6 7 8
Levels: 1 5 2 6 3 7 4 8
Niestety, myślę, że to jedyny sposób, aby to zrobić. Po prostu mi się to nie podoba, bo nie jest zbyt elegancko. No cóż. Nie mogę ich wszystkich wygrać. Dzięki. –
Twój przypadek pracy musi być inny, ponieważ domyślna kolejność z podanego przykładu jest taka sama jak moja. Najlepsze odpowiedzi zawsze osiąga się dzięki największej ilości informacji w pytaniu. –
Wszystkie potrzebne informacje, które podałem. facet_wrap (~ czas) gdzie czas = 1,2,3,4 ... To będzie działał domyślnie na pierwszych wierszach, a następnie na kolumnach. Czy mówisz, że dostajesz coś innego niż to, w którym najpierw spuszcza kolumny, a potem wiersze? –
Użyj parametru kierunek dir
do facet_wrap()
. Domyślnie jest pozioma, a to może być włączony do pionu:
# Horizontally
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2)
# Vertically
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2, dir="v")
zmiany poziomów owijania factor..see [to], (http://stackoverflow.com/questions/5490638/how-to-change-the -order-of-facet-labels-in-ggplot-custom-facet-wrap-labels) – agstudy
Rozumiem, że mogę to zrobić, ale kiedy poziomy są tylko punktami czasowymi, to trochę kludgy, nie sądzisz? Poziomy byłyby podobne (1,10,2,20,3,30,4,40, ...) i tak dalej. –
Nie rozumiem tutaj twojego punktu widzenia. czy możesz podać powtarzalny przykład, proszę. – agstudy