Używam ggplot i mam dwa wykresy, które chcę wyświetlić jeden na drugim. Użyłem grid.arrange
z gridExtra, aby je ułożyć. Problem polega na tym, że chcę, aby lewe krawędzie wykresów były wyrównane, a także prawe krawędzie, niezależnie od etykiet osi. (problem pojawia się, ponieważ etykiety jednego wykresu są krótkie, a drugiego długie).
Pytanie:
jak mogę to zrobić? Nie jestem żonaty z grid.arrange, ale ggplot2 jest koniecznością.
Co próbowałem:
próbowałem grać z szerokościami i wysokościami, a także ncol i nrow, aby utworzyć siatkę 2 x 2 i umieścić wizualizacje w przeciwnych rogach, a następnie grać z szerokościami, ale nie mogłem uzyskać wizualizacji w przeciwnych rogach .
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
grid.arrange(A, B, ncol=1)
Odpowiedzi:
Spróbuj tego,
Edytować
Oto bardziej ogólne rozwiązanie (działa z dowolną liczbą działek) przy użyciu zmodyfikowanej wersji
rbind.gtable
zawartej wgridExtra
źródło
tableGrob
.gtable::cbind
Daje mi rozczarowujący błąd:nrow(x) == nrow(y) is not TRUE
. Jakieś sugestie?[2:5]
oznacza?Chciałem uogólnić to dla dowolnej liczby wątków. Oto rozwiązanie krok po kroku wykorzystujące podejście Baptiste:
zbierz szerokości dla każdego grobu na każdym wykresie
użyj do.call, aby uzyskać maksymalną szerokość
przypisz maksymalną szerokość do każdego groba
wątek
źródło
Korzystanie z pakietu cowplot :
źródło
Na http://rpubs.com/MarkusLoew/13295 jest naprawdę łatwe dostępne rozwiązanie (ostatnia pozycja) Zastosowane do tego problemu:
możesz również użyć tego zarówno dla szerokości, jak i wysokości:
źródło
size="first"
oznacza, że wyrównanie nie będzie wyglądało zbyt dobrze, jeśli druga działka jest większa niż pierwszaTe
egg
okłady pakietów ggplot przedmiotów do standaryzowanego3x3
gtable, umożliwiając ustawienie paneli działce między dowolnymi ggplots oraz szlifowanych nich.źródło
geom_tile
) z legendą na dole i wieloaspektową mapą cieplną (facet_grid
zgeom_tile
), ale nie udało się wyrównać wysokości trzeciego wykresu, który był dendrogramem (geom_segment
). jednak cowplot lubgridExtra::grid.arrange
nie byli w stanie zrobić nawet tego pierwszego, więc to działa najlepiej jak dotądOto inne możliwe rozwiązanie przy użyciu
melt
pakietu reshape2 ifacet_wrap
:źródło
Patchwork Pakiet ten obsługuje domyślnie:
Utworzony 08.12.2019 przez pakiet reprex (v0.3.0)
źródło
W najlepszym przypadku jest to hack:
Jednak wydaje się to naprawdę złe.
źródło
Wiem, że to stary post i że już na niego udzielono odpowiedzi, ale mogę zasugerować połączenie podejścia @ baptiste z,
purrr
aby wyglądał ładniej:źródło