2012-11-08 38 views
107

Sto tracciando un grafico con una variabile categoriale sull'asse xe una variabile numerica sull'asse y.Cambiare la dimensione del carattere e la direzione del testo degli assi in ggplot2

Per l'asse x, dato che ci sono molti punti dati, la formattazione predefinita del testo fa sì che l'etichetta di ogni segno di spunta si sovrapponga ad altre etichette. Come faccio a (a) modificare la dimensione del carattere per il mio testo dell'asse e (b) modificare l'orientamento del testo in modo che il testo sia perpendicolare all'asse?

+0

E un altro http://stackoverflow.com/q/8097642/1172302 –

risposta

164

Uso theme():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10)) 
ggplot(d, aes(x=x, y=y)) + geom_point() + 
    theme(text = element_text(size=20), 
     axis.text.x = element_text(angle=90, hjust=1)) 
#vjust adjust the vertical justification of the labels, which is often useful 

enter image description here

c'è un sacco di buone informazioni su come formattare i tuoi ggplots here. È possibile visualizzare un elenco completo di parametri che è possibile modificare (in pratica, tutti) utilizzando ?theme.

+1

penso che dovrebbe essere 'hjust = 1'. –

+0

Vero! Corretto per il commento di Artem, ma non ho aggiornato l'immagine. –

36

Ditto @Drew Steen sull'uso di theme(). Qui ci sono attributi di tema comuni per il testo degli assi e i titoli.

ggplot(mtcars,aes(x=factor(cyl),y=mpg))+ 
    geom_point()+ 
    theme(axis.text.x = element_text(colour="grey20",size=20,angle=90,hjust=.5,vjust=.5,face="plain"), 
     axis.text.y = element_text(colour="grey20",size=12,angle=0,hjust=1,vjust=0,face="plain"), 
     axis.title.x = element_text(colour="grey20",size=12,angle=0,hjust=.5,vjust=0,face="plain"), 
     axis.title.y = element_text(colour="grey20",size=12,angle=90,hjust=.5,vjust=.5,face="plain")) 
2

L'utilizzo dell'attributo "riempimento" aiuta in casi come questo. Puoi rimuovere il testo dall'asse usando element_blank() e mostrare il grafico a barre multi colore con una legenda. Sto tramando una frequenza rimozione parte in un negozio di riparazione, come di seguito

ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x = element_blank()) 

Sono andato per questa soluzione nel mio caso, come ho avuto molti bar in grafico a barre e non ero in grado di trovare una dimensione di carattere adatto che è sia leggibile e anche abbastanza piccolo da non sovrapporsi l'un l'altro.

11

Usa tema():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10)) 
ggplot(d, aes(x=x, y=y)) + geom_point() + 
theme(text = element_text(size=20)) 
3

aggiunta alle soluzioni precedenti, è anche possibile specificare la dimensione del carattere relativa alla base_size inclusi in temi come theme_bw() (dove base_size è 11) utilizzando la funzione di rel() .

Ad esempio:

ggplot(mtcars, aes(disp, mpg)) + 
    geom_point() + 
    theme_bw() + 
    theme(axis.text.x=element_text(size=rel(0.5), angle=90)) 
Problemi correlati