2013-07-15 13 views
16

Mam ten sam problem co this user: Chciałbym utworzyć wykres facet_grid z dyskretną osią X i chciałbym mieć oś X etykiety powinny być napisane pod każdym aspektem, a nie tylko pod dolnym rzędem faset. Na przykład:Wymuś tekst osi X na wszystkich aspektach wykresu facet_grid

# Drop some factor levels to make the plot smaller 
diamondSub <- subset(diamonds, (cut=="Ideal" | cut=="Premium") & 
        (color=="E" | color=="I")) 

# Note that scales="free_x" has no practical effect here 
ggplot(diamondSub, aes(x=clarity, y=price)) + 
    geom_blank()+ 
    geom_boxplot() + 
    facet_grid(cut~color, scales="free_x") 

enter image description here

jednak, że wolę nie używać roztworu z tego postu, który był po prostu użyć facet_wrap zamiast facet_grid, bo ja wolę drogę facet_grid etykiety tekstu pas z jedną zmienną na górze kolumn i drugą zmienną po bokach rzędów.

Czy istnieje sposób na umieszczenie etykiet osi X pod każdym aspektem, gdy wszystkie osie x są w rzeczywistości takie same, używając facet_grid?

Odpowiedz

15

Można wstawić kopię osi wewnątrz gtable,

library(gtable) 
g <- ggplotGrob(p) 
# locate the panels 
panels <- grep("panel", g$layout$name) 
top <- unique(g$layout$t[panels]) 
# intersperse a copy of the bottom axes 
all <- gtable:::rbind_gtable(gtable:::rbind_gtable(g[seq.int(min(top)), ], 
                g[max(top)+1,], "first"), 
          g[seq(min(top)+1, nrow(g)),], "first") 
grid.newpage() 
grid.draw(all) 

enter image description here

+0

otrzymuję błąd podczas uruchamiania linii 'wszystko <- gtable ::: rbind_gtable (gtable ::: rbind_gtable (g [1: 4], g [7,]), g [5: 9,]) ". Błąd, który otrzymałem, to "Błąd w UseMethod (" grid.draw "): brak stosowanej metody dla" grid.draw "zastosowanej do obiektu klasy" function "'. Wierzę, że 'p' odnosi się do obiektu ggplot, czy to prawda? –

+0

tak, p to twój ggplot. Co otrzymujesz z 'print (all)'? Powinien to być układ 'TableGrob (10 x 8)": 16 grobs' itd. – baptiste

+0

Błąd, który mam teraz jest następujący: '> all <- gtable ::: rbind_gtable (gtable ::: rbind_gtable (g [1 : 4], g [7,]), g [5: 7,]) Błąd w mmm

Powiązane problemy