Подтвердить что ты не робот

Добавить цитату сноски за пределами участка в R?

Я хотел бы добавить ссылку на сноску к моему 3-панельному графику грифа, созданного в R. Это сноска для кредитования источника данных. В идеале я хотел бы иметь его ниже и внешнее по отношению ко всем трем осям - предпочтительно в левом нижнем углу.

Я использую ggplot2, а также ggsave(). Это означает, что я не могу использовать решения на основе grid.text(), потому что это только рисует окно x11() и не может быть добавлено к объекту ggplot.

Использование вместо png() ...code... dev.off() не является опцией, потому что мне нужны параметры изменения размера ggsave, и эта команда производит более качественные и четкие отпечатки (это также намного быстрее, потому что я не печатаю на экране).

Вот мой базовый код:

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)

Я пробовал:

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)

Это правильно помещает сноску в левый нижний угол на экран x11(), внешний по отношению к графикам, но, к сожалению, поскольку он не применяется к объекту p1, он не сохраняется командой ggsave.

Я также пробовал:

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)

Это успешно печатает с помощью ggsave, однако имеет следующие проблемы:

  • Повторяется 3 раза в каждом из трех граней, а не в 1 раз.
  • Он содержится внутри участков, а не внешних по отношению к ним.
  • Текст трудно разместить --- кажется, используются сюжетные единицы (моя ось x - дата, поэтому 0 помещает ее в 1970).
  • Размер текста не изменяется, несмотря на мой параметр размера.

Несколько связанных ссылок, когда я изучил это...

4b9b3361

Ответ 1

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)

введите описание изображения здесь

Изменить: обратите внимание, что это решение несколько дополняет новый аргумент caption, добавленный в ggplot2, так как textGrob здесь можно выровнять по отношению ко всему рисунку, а не только к панели сюжетов.

Ответ 2

ggplot2 теперь имеет эту способность изначально, без необходимости в дополнительных пакетах. ... + 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.")

введите описание изображения здесь