web-dev-qa-db-fra.com

Ajouter une référence de note de bas de page en dehors de la zone de tracé dans R?

Je voudrais ajouter une citation de note de bas de page à mon tracé de grille à trois facettes produit en R. C'est une note de bas de page pour créditer la source de données. J'aimerais idéalement l'avoir en dessous et à l'extérieur des trois axes --- de préférence en bas à gauche.

J'utilise ggplot2 Et aussi ggsave(). Cela signifie que je ne peux pas utiliser de solutions basées sur grid.text(), car cela ne s'appuie que sur la fenêtre x11() et ne peut pas être ajouté à l'objet ggplot.

Utiliser à la place png() ...code... dev.off() ne semble pas être une option car j'ai besoin des paramètres de redimensionnement de ggsave, et trouver cette commande produit des impressions meilleures et plus claires (qui sont également beaucoup plus rapides, car je n'imprime pas à l'écran).

Voici mon code de base:

p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
        opts(title=mytitle)
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)

J'ai essayé:

p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
        opts(title=mytitle)
print(p1)
grid.text(unit(0.1,"npc"),0.025,label = "Data courtesy of Me")
grid.gedit("GRID.text", gp=gpar(fontsize=7))
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)

Cela place correctement la note de bas de page dans le coin inférieur gauche de l'affichage x11 (), à l'extérieur des tracés, mais malheureusement, comme elle n'est pas appliquée à l'objet p1, elle n'est pas enregistrée par la commande ggsave.

J'ai aussi essayé:

p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
    opts(title=mytitle) +
annotate("text", label = "Footnote", x = 0, y = 10, size = 5, colour = "black") +
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)

Cela s'imprime avec succès à l'aide de ggsave, mais il présente les problèmes suivants:

  • Il est répété 3 fois, dans chacune des 3 facettes, plutôt que 1 fois.
  • Il est contenu dans les parcelles, plutôt qu'à l'extérieur.
  • Le texte est difficile à placer --- semble utiliser des unités de tracé (mon axe x est la date, donc 0 le met vers 1970).
  • La taille du texte ne semble pas changer malgré mon paramètre de taille.

Quelques liens connexes depuis que j'ai exploré cela ...

30
Mittenchops
library(gridExtra)
library(grid)
library(ggplot2)

g <- grid.arrange(qplot(1:10, 1:10, colour=1:10) + labs(caption="ggplot2 caption"), 
              bottom = textGrob("grid caption", x = 1, 
                                hjust = 1, gp = gpar(fontface = 3L, fontsize = 9)))
ggsave("plot.pdf", g)

enter image description here

Edit: notez que cette solution est quelque peu complémentaire à l'argument de légende récent ajouté à ggplot2, car textGrob peut ici être aligné par rapport à la figure entière, pas seulement au panneau de tracé.

32
baptiste

ggplot2 a maintenant cette capacité en mode natif sans besoin de packages supplémentaires. ... + labs(caption = "footnote", ...)

library(ggplot2) 
ggplot(diamonds, aes(carat, price, color = clarity)) + 
  geom_point() + 
  labs(title = "Diamonds are forever...", 
       subtitle = "Carat weight by Price", 
       caption = "H. Wickham. ggplot2: Elegant Graphics for Data Analysis Springer-Verlag New York, 2009.")

enter image description here

37
Brandon Bertelsen

Ajout à la réponse de Brandon Bertelsen: si vous voulez avoir la légende dans le coin gauche, ajoutez

theme(plot.caption = element_text(hjust = 0))
5
MartineJ