2013-07-15 10 views
16

Ich habe das gleiche Problem wie this user: Ich möchte eine facet_grid Handlung mit einer diskreten X-Achse machen, und ich hätte gerne die X-Achse Beschriftungen werden unter jeder Facette und nicht nur unterhalb der unteren Facettenreihe geschrieben. Zum Beispiel:Erzwinge X-Achsen-Text für alle Facetten eines facet_grid-Plots

# 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

Allerdings würde ich es vorziehen, nicht die Lösung von dieser Stelle zu verwenden, die nur war facet_wrap statt facet_grid zu verwenden, weil ich die Art und Weise facet_grid Etiketten der Streifen Text bevorzugen mit einer Variablen oben auf den Spalten und der anderen Variablen an den Seiten der Zeilen.

Gibt es eine Möglichkeit, X-Achsen-Etiketten unter jeder Facette zu erhalten, wenn alle x-Achsen tatsächlich die gleichen sind, unter Verwendung facet_grid?

Antwort

15

Sie können eine Kopie der Achsen innerhalb des gtable einsetzen,

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

-I-Fehler erhalten, während die Linie laufen 'alle <- gtable ::: rbind_gtable (gtable ::: rbind_gtable (g [1: 4], g [7,]), g [5: 9,]) '. Der Fehler, den ich bekam, ist 'Fehler in UseMethod (" grid.draw "): keine anwendbare Methode für 'grid.draw' angewendet auf ein Objekt der Klasse" function "'. Ich glaube, 'p' bezieht sich auf das Objekt ggplot, ist das wahr? –

+0

ja, p ist dein ggplot. Was bekommst du mit 'print (all)'? Es sollte ein 'TableGrob (10 x 8)" Layout "sein: 16 Grob's usw. – baptiste

+0

Der Fehler, den ich jetzt habe, ist folgender:'> all <- gtable ::: rbind_gtable (gtable ::: rbind_gtable (g [1 : 4], g [7,]), g [5: 7,]) Fehler in mmm

Verwandte Themen