Titre du tracé central dans ggplot2

256

Salut ce code simple (et tous mes scripts de ce matin) a commencé à me donner un titre décentré dans ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

J'ai fraîchement installé ce qui précède ce matin pour essayer de résoudre ce problème ....

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

entrez la description de l'image ici

Christopher John
la source
53
utilisation... + theme(plot.title = element_text(hjust = 0.5))
J_F

Réponses:

335

D'après les nouvelles de sortie de ggplot 2.2.0: "Le titre de l'intrigue principale est maintenant aligné à gauche pour mieux travailler mieux avec un sous-titre" . Voir aussi l' plot.titleargument dans ?theme: "aligné à gauche par défaut".

Comme indiqué par @J_F, vous pouvez ajouter theme(plot.title = element_text(hjust = 0.5))pour centrer le titre.

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

entrez la description de l'image ici

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

entrez la description de l'image ici

Henrik
la source
Lorsque j'utilise à la place, ... theme(plot.title = element_text(hjust = 'center'))j'obtiens les messages d'avertissement d'erreur: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion et pas de titre. Est-ce un bug?
James Hirschorn
2
@JamesHirschorn Ce n'est pas un bug. La valeur utilisée pour hjustdoit être numérique.
Stibu
à partir de la version 3.3.0 de ggplot2, le titre est centré par défaut.
Akronix
Si vous êtes intéressé par l'inverse: passer de l'alignement central à l'alignement à gauche, vous pouvez utiliser cette réponse de SO: stackoverflow.com/a/57792897/2904315
Akronix
J'ai ajouté ce code theme(plot.title = element_text(hjust = 0.5)), mais cela n'a pas fonctionné, c'est bizarre.
ahbon
134

Comme indiqué dans la réponse de Henrik , les titres sont alignés à gauche par défaut à partir de ggplot 2.2.0. Les titres peuvent être centrés en ajoutant ceci à l'intrigue:

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

Cependant, si vous créez plusieurs tracés, il peut être fastidieux d'ajouter cette ligne partout. On pourrait alors aussi changer le comportement par défaut de ggplot avec

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

Une fois que vous avez exécuté cette ligne, tous les tracés créés par la suite utiliseront le paramètre de thème plot.title = element_text(hjust = 0.5)par défaut:

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

entrez la description de l'image ici

Pour revenir aux paramètres par défaut de ggplot2, vous pouvez soit redémarrer la session R, soit choisir le thème par défaut avec

theme_set(theme_gray())
Stibu
la source
2

Le ggeasypackage a une fonction appelée easy_center_title()pour cela. Je le trouve beaucoup plus attrayant que theme(plot.title = element_text(hjust = 0.5))et c'est tellement plus facile à retenir.

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

entrez la description de l'image ici

Notez qu'au moment d'écrire cette réponse, vous devrez installer la version de développement ggeasyde GitHub pour l'utiliser easy_center_title(). Vous pouvez le faire en exécutant remotes::install_github("jonocarroll/ggeasy").

Thomas Neitmann
la source