/ / Dopasowywanie przestrzeni "marginesowej" dla tekstu osi w ggplot2 - r, ggplot2, gridextra, grob

Dopasowywanie "marginesu" dla tekstu osi w ggplot2 - r, ggplot2, gridextra, grob

Którą właściwość, jeśli istnieje, w ggplot sterownica
temu szerokość (lub puste miejsca) tekstu osi?


W poniższym przykładzie moim ostatecznym celem jest doprowadzenie "" po lewej stronie górnej wykres tak, aby dopasować ją do dołu wykresu.

próbowałem theme(plot.margin=..) ale to wpływa na marginesie całej działki.
facet"ing" nie pomogło, ponieważ wagi na y są różne.

W ostateczności zdaję sobie sprawę, można zmodyfikować samego tekstu osi, ale następnie będzie również trzeba obliczyć cięć dla każdego wykresu.

wprowadź opis obrazu tutaj

Przykład powtarzalne:

library(ggplot2)
library(scales)

D <- data.frame(x=LETTERS[1:5],  y1=1:5, y2=1:5 * 10^6)

P.base <- ggplot(data=D, aes(x=x)) +
scale_y_continuous(labels=comma)

Plots <- list(
short = P.base + geom_bar(aes(y=y1), stat="identity", width=.5)
, long  = P.base + geom_bar(aes(y=y2), stat="identity", width=.5)
)

do.call(grid.arrange, c(Plots, ncol=1, main="Sample Plots"))

Odpowiedzi:

7 dla odpowiedzi № 1

Tutaj jest jedno rozwiązanie.

Pomysł został zapożyczony od"Posiadanie poziome zamiast etykiety pionowe na 2 x 1 aspekty i podziału y etykiety Zdefiniować funkcję

align_plots1 <- function (...) {
pl <- list(...)
stopifnot(do.call(all, lapply(pl, inherits, "gg")))
gl <- lapply(pl, ggplotGrob)
bind2 <- function(x, y) gtable:::rbind_gtable(x, y, "first")
combined <- Reduce(bind2, gl[-1], gl[[1]])
wl <- lapply(gl, "[[", "widths")
combined$widths <- do.call(grid::unit.pmax, wl)
grid::grid.newpage()
grid::grid.draw(combined)
}

short <- P.base + geom_bar(aes(y=y1), stat="identity", width=.5)
long <- P.base + geom_bar(aes(y=y2), stat="identity", width=.5)

#Now, align the plots
align_plots1(short, long)

Oto wynik.

wprowadź opis obrazu tutaj