326 votes

Centrer le titre du tracé en ggplot2

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é les éléments ci-dessus 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")

enter image description here

64 votes

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

430voto

Henrik Points 12148

D'après le communiqué de presse de ggplot 2.2.0 : "Le titre principal de l'intrigue est maintenant aligné à gauche pour mieux fonctionner avec un sous-titre" . Voir aussi le plot.title argument dans ?theme : "aligné à gauche par défaut".

Comme l'a fait remarquer @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")

enter image description here

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

enter image description here

0 votes

Lorsque j'utilise plutôt ... theme(plot.title = element_text(hjust = 'center')) Je reçois 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. S'agit-il d'un bug ?

3 votes

@JamesHirschorn Il ne s'agit pas d'un bogue. La valeur utilisée pour hjust doit être numérique.

0 votes

À partir de la version 3.3.0 de ggplot2, le titre est centré par défaut.

152voto

Stibu Points 9657

Comme indiqué dans le 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 au tracé :

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

Cependant, si vous créez de nombreuses parcelles, il peut être fastidieux d'ajouter cette ligne partout. On peut 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, toutes les parcelles créées 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")

enter image description here

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

theme_set(theme_gray())

12voto

Tommy Points 381

Le site ggeasy possède une fonction appelée easy_center_title() pour faire exactement ça. Je trouve cela 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()

enter image description here

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

5voto

Rtist Points 391

Si vous travaillez beaucoup avec des graphiques et ggplot, vous pourriez être fatigué d'ajouter le thème() à chaque fois. Si vous ne voulez pas changer le thème par défaut comme suggéré précédemment, vous trouverez peut-être plus facile de créer votre propre thème personnel.

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

Disons que vous avez plusieurs graphiques, p1, p2 et p3, il suffit de leur ajouter personal_theme.

p1 + personal_theme
p2 + personal_theme
p3 + personal_theme

dat <- data.frame(
  time = factor(c("Lunch","Dinner"), 
levels=c("Lunch","Dinner")),
  total_bill = c(14.89, 17.23)
)
p1 = 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")

p1 + personal_theme

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X