Ich versuche, mit ggplot ein Diagramm zu erstellen, das die absoluten Werte zweier Variablen vergleicht und auch das Verhältnis zwischen ihnen anzeigt. Da das Verhältnis unitless ist und die Werte nicht, kann ich sie nicht auf der gleichen y-Achse zeigen, also würde ich gerne als zwei separate Graphen mit ausgerichteten x-Achsen stapeln.Mehrere ggplot-Diagramme mit und ohne Legenden ausrichten
Hier ist, was ich bisher habe:
library(ggplot2)
library(dplyr)
library(gridExtra)
# Prepare some sample data.
results <- data.frame(index=(1:20))
results$control <- 50 * results$index
results$value <- results$index * 50 + 2.5*results$index^2 - results$index^3/8
results$ratio <- results$value/results$control
# Plot absolute values
plot_values <- ggplot(results, aes(x=index)) +
geom_point(aes(y=value, color="value")) +
geom_point(aes(y=control, color="control"))
# Plot ratios between values
plot_ratios <- ggplot(results, aes(x=index, y=ratio)) +
geom_point()
# Arrange the two plots above each other
grid.arrange(plot_values, plot_ratios, ncol=1, nrow=2)
Das große Problem ist, dass die Legende auf der rechten Seite des ersten Plot macht es eine andere Größe. Ein kleines Problem ist, dass ich lieber nicht den Namen und die Häkchen der X-Achse auf dem obersten Diagramm zeige, um Unordnung zu vermeiden und klar zu machen, dass sie die gleiche Achse haben.
Ich habe in dieser Frage und ihre Antworten sah:
Leider keine Antwort gibt funktioniert gut für mich. Faceting scheint nicht gut zu passen, da ich für meine beiden Graphen völlig unterschiedliche y-Skalen haben möchte. Die Manipulation der von ggplot_gtable zurückgegebenen Dimensionen erscheint vielversprechender, aber ich weiß nicht, wie ich die Tatsache umgehen kann, dass die beiden Graphen eine andere Anzahl von Zellen haben. Naiv, diesen Code zu kopieren scheint die resultierenden Diagrammdimensionen für meinen Fall nicht zu ändern.
Hier ist eine andere ähnliche Frage:
The perils of aligning plots in ggplot
Die Frage selbst scheint eine gute Option vorschlagen, aber rbind.gtable beschwert sich, wenn die Tabellen unterschiedliche Anzahl von Spalten haben, was hier der Fall ist aufgrund der Legende. Vielleicht gibt es eine Möglichkeit, eine extra leere Spalte in die zweite Tabelle einzufügen? Oder eine Möglichkeit, die Legende im ersten Diagramm zu unterdrücken und sie dann dem kombinierten Diagramm wieder hinzuzufügen?
Ich würde die rbind_gtable Ansatz verwenden, aber wie Sie beachten, müssen Sie die Gtables haben die gleiche Anzahl von Spalten. Es ist [einfach genug] (http://stackoverflow.com/questions/21529926/arrange-ggplots-together-in-custom-ratios-and-spacing/21531303#21531303), mit gtable_add_cols – baptiste
[siehe auch dieses] (http://stackoverflow.com/questions/25893673/how-to-arrange-plots-with-shared-axes/25923349#25923349) – baptiste
Warum nicht einfach entfernen Sie die Facettentitel beim Erstellen einer facettierten Darstellung? Siehe meine Antwort für ein Beispiel. – Jaap