Ich verwende ggplot und habe zwei Diagramme, die ich übereinander anzeigen möchte. Ich habe grid.arrange
von gridExtra verwendet, um sie zu stapeln. Das Problem ist, dass die linken Ränder der Diagramme sowie die rechten Ränder unabhängig von den Achsenbeschriftungen ausgerichtet werden sollen. (Das Problem tritt auf, weil die Beschriftungen eines Diagramms kurz und das andere lang sind.)
Die Frage:
Wie kann ich das machen? Ich bin nicht mit grid.arrange verheiratet, aber der ggplot2 ist ein Muss.
Was ich versucht habe:
Ich habe versucht, mit Breiten und Höhen sowie ncol und nrow zu spielen, um ein 2 x 2-Raster zu erstellen und die Grafiken in gegenüberliegenden Ecken zu platzieren und dann mit den Breiten zu spielen, aber ich konnte die Grafiken nicht in gegenüberliegenden Ecken erhalten .
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)
Antworten:
Versuche dies,
Bearbeiten
Hier ist eine allgemeinere Lösung (funktioniert mit einer beliebigen Anzahl von Plots) unter Verwendung einer modifizierten Version von
rbind.gtable
enthalten ingridExtra
quelle
tableGrob
. Dasgtable::cbind
gibt mir einen enttäuschenden Fehler :nrow(x) == nrow(y) is not TRUE
. Irgendwelche Vorschläge?[2:5]
?Ich wollte dies für eine beliebige Anzahl von Handlungen verallgemeinern. Hier ist eine schrittweise Lösung unter Verwendung des Ansatzes von Baptiste:
Sammeln Sie die Breiten für jeden Grob jedes Grundstücks
Verwenden Sie do.call, um die maximale Breite zu erhalten
Weisen Sie jedem Grob die maximale Breite zu
Handlung
quelle
Mit cowplot Paket:
quelle
Auf http://rpubs.com/MarkusLoew/13295 ist eine wirklich einfache Lösung verfügbar (letzter Punkt). Auf dieses Problem angewendet:
Sie können dies auch für Breite und Höhe verwenden:
quelle
size="first"
bedeutet, dass die Ausrichtung nicht sehr gut aussieht, wenn die zweite Handlung größer ist als die ersteDas
egg
Paket verpackt ggplot-Objekte in eine standardisierte3x3
gtable und ermöglicht so die Ausrichtung von Plotfeldern zwischen beliebigen ggplots, einschließlich facettierten.quelle
geom_tile
) mit Legende unten und eine facettenreiche Heatmap (facet_grid
mitgeom_tile
) richtig horizontal anordnen , aber die Höhe des dritten Diagramms, das ein Dendrogramm (geom_segment
) war, konnte nicht ausgerichtet werden. Allerdings Cowplot odergridExtra::grid.arrange
waren nicht in der Lage, auch die ersteren zu tun, so funktioniert dies am besten bisherHier ist eine weitere mögliche Lösung
melt
aus dem reshape2-Paketfacet_wrap
:quelle
Das Patchwork- Paket behandelt dies standardmäßig:
Erstellt am 08.12.2019 durch das reprex-Paket (v0.3.0)
quelle
Bestenfalls ist dies ein Hack:
Es fühlt sich aber wirklich falsch an.
quelle
Ich weiß, dass dies ein alter Beitrag ist und dass er bereits beantwortet wurde, aber ich kann vorschlagen, den Ansatz von @ baptiste mit zu kombinieren
purrr
, um ihn schöner aussehen zu lassen:quelle