Sto provando a utilizzare ggplot per disegnare un grafico che confronta i valori assoluti di due variabili e mostra anche il rapporto tra loro. Poiché il rapporto è privo di unità e i valori non lo sono, non posso mostrarli sullo stesso asse y, quindi mi piacerebbe impilarli verticalmente come due grafici separati con assi x allineati.Allineare più grafici ggplot con e senza legende
Ecco quello che ho finora:
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)
Il grosso problema è che la leggenda sulla destra della prima trama lo rende una dimensione diversa. Un problema minore è che preferirei non mostrare il nome dell'asse x ei segni di spunta sulla trama superiore, per evitare confusione e chiarire che condividono lo stesso asse.
Ho guardato a questa domanda e le sue risposte:
Purtroppo, né la risposta non funziona bene per me. La sfaccettatura non sembra una buona scelta, dal momento che voglio avere scale y completamente differenti per i miei due grafici. Manipolare le dimensioni restituite da ggplot_gtable sembra più promettente, ma non so come aggirare il fatto che i due grafici abbiano un numero diverso di celle. Copiando in modo ingannevole quel codice non sembra cambiare le dimensioni del grafico risultante per il mio caso.
Ecco un'altra domanda simile:
The perils of aligning plots in ggplot
La domanda stessa sembra suggerire una buona opzione, ma rbind.gtable lamenta se le tabelle hanno un diverso numero di colonne, che è il caso qui a causa della leggenda. Forse c'è un modo per inserire una colonna extra vuota nel secondo tavolo? O un modo per sopprimere la legenda nel primo grafico e quindi aggiungerla nuovamente al grafico combinato?
userei l'approccio rbind_gtable, ma come si nota è necessario rendere i gtables hanno lo stesso numero di colonne. È [abbastanza facile però] (http://stackoverflow.com/questions/21529926/arrange-ggplots-together-in-custom-ratios-and-spacing/21531303#21531303), con gtable_add_cols – baptiste
[guarda anche questo] (http://stackoverflow.com/questions/25893673/how-to-arrange-plots-with-shared-axes/25923349#25923349) – baptiste
Perché non rimuovere solo i titoli delle sfaccettature quando si crea una trama sfaccettata? Vedi la mia risposta per un esempio. – Jaap