2012-09-27 18 views
7

Sto provando a creare un grafico con grafici orizzontali in ggplot2, che puoi fare solo utilizzando coord_flip(). Sto anche provando a distendere verticalmente i boxplot per raggruppare determinati set. Ho letto che la sfaccettatura è raccomandata per questo genere di cose, ma questo è incompatibile con coord_flip(), come possiamo vedere qui: ggplot2: boxplot with facet_grid and free scale. Quindi mi chiedo se è possibile utilizzare i livelli vuoti per creare spazi vuoti. Ecco quello che sono riuscito a fare finora:posizionamento di grafici orizzontali in ggplot2

d <- diamonds 
library("ggplot2") 
levels(d$cut) <- list(A="Fair", B="Good", "-", C="Very Good", D="Ideal", E="Premium") 
p = ggplot(d, aes(x=cut, y=depth)) 
p + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks = c("A", "B", "-", "C", "D", "E"), drop=FALSE) + 
    coord_flip() 

ph = 2.75 
pw = 4 
ggsave("plot.png", height=ph, width=pw) 

Come si può vedere, se creo un livello in bianco con "-" in esso e includerlo nel scale_x_discrete(), poi in qualche modo ottengo una riga vuota . Il problema è che posso aggiungere solo uno spazio. Qualcuno ha qualche idea su come aggiungere spazi tra questi grafici a riquadri orizzontali?

risposta

3

Ecco un modo che vi permetterà di aggiungere livelli più vuote:

d <- diamonds 
levels(d$cut) <- list(A="Fair", B="Good", " "="space1", C="Very Good", D="Ideal", " "="space2", E="Premium") 
ggplot(d, aes(x=cut, y=depth)) + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks = c("A", "B", " ", "C", "D", " ", "E"), drop=FALSE) + 
    coord_flip() 

Questo lascerà segni di graduazione sui distanziatori così, però:

plot with tick marks

Rimuovere tutte le zecche è semplice aggiungendo:

+ theme(axis.ticks.y = element_line(linetype=0)) 

plot without tick marks

Ma se si desidera rimuovere i segni di spunta solo per i distanziatori, almeno un modo (sono sicuro che ci altri) è di farlo con una funzione personalizzata:

f <- function(x) { 
    x[!x %in% c("A", "B", "C", "D", "E")] <- NA 
    x 
} 

ggplot(d, aes(x=cut, y=depth)) + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks=f, drop=FALSE) + 
    coord_flip() 

plot with some tick marks

Problemi correlati