2016-01-06 8 views
11

Sto tentando di generare una serie di dot-plot insieme usando facet_grid. Così facendo, ho notato che geom_dotplot non sembra rispondere all'argomento di facet_grid scale = "free_y".ggplot2: Nessun asse libero viene ridimensionato quando si utilizza geom_dotplot con facet_grid

Ecco qualche esempio di codice:

require(ggplot2) 

#Example data 
set.seed(3) 
df = data.frame(Gene = rep(c("a", "b", "c", "d"), each=20), 
       ToD = rep(c("Morning", "Evening"), times = 40), 
       Expression = c(runif(20, min=0, max=10), 
           runif(20, min=0, max=1), 
           runif(20, min=0, max=1000), 
           runif(20, min=0, max=100))) 

#Box plots of example data 
ggplot(df, aes(x = ToD, y = Expression)) + 
    geom_boxplot() + 
    facet_grid(Gene ~ ., scales = "free_y") 

#Dot plots of example data 
ggplot(df, aes(x = ToD, y = Expression)) + 
    geom_dotplot(binaxis = "y", stackdir = "centerwhole") + 
    facet_grid(Gene ~ ., scales = "free_y") 

Ed ecco le versioni di R e ggplot2 Attualmente sto usando:

  • R versione 3.2.2 (2015/08/14)
  • ggplot2_1.0.1.9003

Così, quando ho generare le trame scatola, tutto funziona come previsto con gli assi Y ridimensionamento appropriato per ogni riga sfaccettatura:

Box plots of test data

Tuttavia, i dot plots mantenere la stessa scala di asse Y per ogni riga sfaccettatura:

Dot plots of test data

Ho letto di un errore noto in ggplot2 dove coord_flip e facet_grid non funzionano insieme quando si specificano le scale libere. Questo è legato allo stesso problema?

Mentre potevo generare ciascuno dei grafici singolarmente e quindi combinarli con grid.arrange, questo è ingombrante per i miei scopi. Sto cercando di allineare questi punti dot con altri grafici sfaccettati, e vorrei evitare di dover rigenerare tutti quelli che usano anche grid.arrange. qualche idea?

Grazie per l'aiuto che puoi offrire e facci sapere se posso fornire ulteriori chiarimenti.

+0

sono stato in grado di replicare l'errore con '' ggplot2_1.0.1' e R versione 3.2.2 (2015-08-14) ', funziona bene per me – mlegge

+0

Ho appena aggiornato ggplot2_2.0.0 e sto ancora correndo lo stesso problema. Suppongo che potrebbe essere necessario effettuare il downgrade? –

+2

Sono stato in grado di replicare l'errore con 'ggplot2_2.0.0' e la stessa versione R – mlegge

risposta

3

Ho letto il documento allo ?geom_dotplot. Apparentemente, l'opzione binpositions può essere impostata su "all" (tutti i dati presi insieme) o "bygroup"; il predefinito. Così, utilizzando Gene sia come gruppo e come sfaccettature, binpositions possono variare e almeno l'asse y libera restituito:

ggplot(df, aes(x = ToD, y = Expression, group=Gene)) + 
    geom_dotplot(binaxis = "y", stackdir = "centerwhole", binpositions="bygroup") + 
    facet_grid(Gene ~ ., scales = "free_y") 

enter image description here

Ma ora il raggruppamento sul asse x scomparso. C'è probabilmente una soluzione migliore, ma il raggruppamento dall'interazione tra gene e Tod sembrava risolverlo:

ggplot(df, aes(x = ToD, y = Expression, group=interaction(Gene,ToD))) + 
    geom_dotplot(binaxis = "y", stackdir = "centerwhole", binpositions="bygroup") + 
    facet_grid(Gene ~ ., scales = "free_y") 

enter image description here

+0

Interessante. Mi sto ancora chiedendo se questa è l'interazione prevista tra le funzioni geom_boxplot e facet_grid (nel qual caso, sembra eccessivamente complessa), o se questo è un bug. Ad ogni modo, la tua soluzione risolve il mio problema attuale. Lo lascerò aperto per un giorno o due prima di contrassegnare la risposta, in modo da non scoraggiare nessun altro dal contribuire. Grazie. –

Problemi correlati