Modifica della dimensione del carattere e della direzione del testo degli assi in ggplot2


188

Sto disegnando un grafico con una variabile categoriale sull'asse xe una variabile numerica sull'asse y.

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



C'è sovrapposizione con stackoverflow.com/q/1330989/946850 , ma questa domanda non copre il ridimensionamento del testo.
krlmlr

Risposte:


292

Utilizzare 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

inserisci qui la descrizione dell'immagine

Ci sono molte buone informazioni su come formattare i tuoi ggplot qui . Puoi vedere un elenco completo di parametri che puoi modificare (sostanzialmente, tutti) usando ?theme.


2
Penso che dovrebbe essere hjust=1.
Artem Sokolov,

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

68

Idem @Drew Steen sull'uso di theme(). Ecco gli attributi dei temi comuni per testo e titoli degli assi.

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

19

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))

19

Aggiungendo alle soluzioni precedenti, è anche possibile specificare la dimensione del carattere relativa a quella base_sizeinclusa in temi come theme_bw()(dove base_sizeè 11) utilizzando la rel()funzione.

Per esempio:

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

5

Quando si creano molti grafici, ha senso impostarli a livello globale (la parte rilevante è la seconda riga, tre linee insieme sono un esempio funzionante):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

4

L'uso dell'attributo "riempimento" aiuta in casi come questo. È possibile rimuovere il testo dall'asse utilizzando element_blank()e mostrare un grafico a barre a più colori con una legenda. Sto pianificando una frequenza di rimozione delle parti in un'officina 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())

Ho optato per questa soluzione nel mio caso poiché avevo molte barre nel grafico a barre e non ero in grado di trovare una dimensione del carattere adatta che sia leggibile e anche abbastanza piccola da non sovrapporsi.


0

Un altro modo per gestire le etichette sovrapposte è l'utilizzo guide = guide_axis(n.dodge = 2).

library(dplyr)
library(tibble)
library(ggplot2)

dt <- mtcars %>% rownames_to_column("name") %>% 
  dplyr::filter(cyl == 4)

# Overlapping labels
ggplot(dt, aes(x = name, y = mpg)) + geom_point()

inserisci qui la descrizione dell'immagine

ggplot(dt, aes(x = name, y = mpg)) + geom_point() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2))

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.