99 votes

Comment ajouter un sous-titre ggplot2 de taille et de couleur différentes ?

J'utilise ggplot2 pour améliorer les diagrammes à barres des précipitations.

Voici un exemple reproductible de ce que je veux réaliser :

library(ggplot2)
library(gridExtra)
secu <- seq(1, 16, by=2)
melt.d <- data.frame(y=secu, x=LETTERS[1:8])
m <- ggplot(melt.d, aes(x=x, y=y)) +
  geom_bar(fill="darkblue") + 
  labs(x="Weather    stations", y="Accumulated Rainfall [mm]") +
  opts(axis.text.x=theme_text(angle=-45, hjust=0, vjust=1),
       title=expression("Rainfall"), plot.margin = unit(c(1.5, 1, 1, 1), "cm"),
       plot.title = theme_text(size = 25, face = "bold", colour = "black", vjust = 5))
z <- arrangeGrob(m, sub = textGrob("Location", x = 0, hjust = -3.5, vjust = -33, gp = gpar(fontsize = 18, col = "gray40"))) #Or guessing x and y with just option
z

Je ne sais pas comment éviter d'utiliser des nombres devinables sur hjust et vjust sur ggplot2 ? Existe-t-il un meilleur moyen de mettre un sous-titre (pas seulement en utilisant \n mais un sous-titre avec une couleur et une taille de texte différentes) ?

J'ai besoin de pouvoir l'utiliser avec ggsave pour avoir un fichier pdf.

Voici deux questions connexes :

Ajouter une citation en note de bas de page en dehors de la zone d'intrigue dans R ?

Comment puis-je ajouter un sous-titre et modifier la taille de la police des graphiques ggplot dans R ?

Merci pour toute aide.

3voto

baptiste Points 19677

Vous pourriez utiliser l'enveloppe du tracé dans grid.arrange et passer un titre personnalisé basé sur la grille,

enter image description here

library(ggplot2)
library(gridExtra)

p <- ggplot() + 
  theme(plot.margin = unit(c(0.5, 1, 1, 1), "cm"))

tg <- grobTree(textGrob("Rainfall", y=1, vjust=1, gp = gpar(fontsize=25, face=2, col="black")),
               textGrob("location", y=0, vjust=0, gp = gpar(fontsize=12, face=3, col="grey50")),
               cl="titlegrob")
heightDetails.titlegrob <- function(x) do.call(sum,lapply(x$children, grobHeight))

grid.arrange(p, top = tg)

2voto

Nathan Points 193

Vous avez peut-être remarqué que le code de Sandy ne produit pas un titre en gras pour "Rainfall" - l'instruction pour rendre ce titre en gras devrait intervenir dans la fonction atop() plutôt que dans la fonction theme().

ggplot(melt.d, aes(x=x, y=y)) + 
 geom_bar(fill="darkblue", stat = "identity") + 
 labs(x="Weather    stations", y="Accumulated Rainfall [mm]") + 
 ggtitle(expression(atop(bold("Rainfall"), atop(italic("Location"), "")))) +
 theme(axis.text.x = element_text(angle=-45, hjust=0, vjust=1),
 plot.title = element_text(size = 25, colour = "black", vjust = -1))

enter image description here

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