Centra il titolo del diagramma in ggplot2


256

Ciao, questo semplice codice (e tutti i miei script da questa mattina) ha iniziato a darmi un titolo fuori centro in ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Ho appena installato quanto sopra questa mattina per provare a risolvere questo problema ....

dat <- data.frame(
time = factor(c("Lunch","Dinner"), levels=c("Lunch","Dinner")),
total_bill = c(14.89, 17.23)
)

# Add title, narrower bars, fill color, and change axis labels
ggplot(data=dat, aes(x=time, y=total_bill, fill=time)) + 
  geom_bar(colour="black", fill="#DD8888", width=.8, stat="identity") + 
  guides(fill=FALSE) +
  xlab("Time of day") + ylab("Total bill") +
  ggtitle("Average bill for 2 people")

inserisci qui la descrizione dell'immagine


53
uso... + theme(plot.title = element_text(hjust = 0.5))
J_F

Risposte:


335

Dalle notizie di rilascio di ggplot 2.2.0: "Il titolo della trama principale è ora allineato a sinistra per funzionare meglio con un sottotitolo" . Vedi anche l' plot.titleargomento in ?theme: "allineato a sinistra per impostazione predefinita".

Come sottolineato da @J_F, puoi aggiungere theme(plot.title = element_text(hjust = 0.5))per centrare il titolo.

ggplot() +
  ggtitle("Default in 2.2.0 is left-aligned")

inserisci qui la descrizione dell'immagine

ggplot() +
  ggtitle("Use theme(plot.title = element_text(hjust = 0.5)) to center") +
  theme(plot.title = element_text(hjust = 0.5))

inserisci qui la descrizione dell'immagine


Quando invece uso ... theme(plot.title = element_text(hjust = 'center'))ottengo i messaggi di avviso di errore: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion e nessun titolo. è un insetto?
James Hirschorn,

2
@JamesHirschorn Questo non è un bug. Il valore utilizzato per hjustdeve essere numerico.
Stibu,

dalla versione 3.3.0 di ggplot2, il titolo è centrato per impostazione predefinita.
Akronix il

Se siete interessati al contrario: lo spostamento dal centro-alinged a allineato a sinistra, quindi è possibile utilizzare questa risposta di SO: stackoverflow.com/a/57792897/2904315
Akronix

Ho aggiunto questo codice theme(plot.title = element_text(hjust = 0.5)), ma non ha funzionato, è strano.
Ahbon,

134

Come affermato nella risposta di Henrik , i titoli sono allineati a sinistra per impostazione predefinita a partire da ggplot 2.2.0. I titoli possono essere centrati aggiungendo questo alla trama:

theme(plot.title = element_text(hjust = 0.5))

Tuttavia, se si creano molti grafici, potrebbe essere noioso aggiungere questa linea ovunque. Si potrebbe anche cambiare il comportamento predefinito di ggplot con

theme_update(plot.title = element_text(hjust = 0.5))

Dopo aver eseguito questa linea, tutti i grafici creati successivamente utilizzeranno l'impostazione del tema plot.title = element_text(hjust = 0.5)come predefinita:

theme_update(plot.title = element_text(hjust = 0.5))
ggplot() + ggtitle("Default is now set to centered")

inserisci qui la descrizione dell'immagine

Per tornare alle impostazioni predefinite originali di ggplot2 è possibile riavviare la sessione R o scegliere il tema predefinito con

theme_set(theme_gray())

2

Il ggeasypacchetto ha una funzione chiamata easy_center_title()per fare proprio questo. Lo trovo molto più attraente di theme(plot.title = element_text(hjust = 0.5))ed è molto più facile da ricordare.

ggplot(data = dat, aes(time, total_bill, fill = time)) + 
  geom_bar(colour = "black", fill = "#DD8888", width = .8, stat = "identity") + 
  guides(fill = FALSE) +
  xlab("Time of day") +
  ylab("Total bill") +
  ggtitle("Average bill for 2 people") +
  ggeasy::easy_center_title()

inserisci qui la descrizione dell'immagine

Nota che per scrivere questa risposta dovrai installare la versione di sviluppo di ggeasyda GitHub easy_center_title(). Puoi farlo correndo remotes::install_github("jonocarroll/ggeasy").

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.