Добавить сноску за пределами области заговора в 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 раза, в каждом из 3 аспектов, а не 1 раз.
- Он содержится внутри графиков, а не за их пределами.
- Текст трудно разместить - кажется, он использует единицы графика (моя ось X - это дата, поэтому 0 помещает его около 1970 года).
- Размер текста не меняется, несмотря на мой параметр размера.
Несколько связанных ссылок, когда я исследовал это...
(не работает с ggsave)
Как пометить барплот в ggplot с метками в другом результате теста?
(находится внутри графика, а не снаружи / ниже графика)
Различные шрифты и размеры шрифта в текстовых записях ярлыка в ggplot2
(не работает с ggsave)
3 ответа
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)
Изменить: обратите внимание, что это решение несколько дополняет недавний аргумент заголовка, добавленный в ggplot2, так как здесь textGrob может быть выровнен относительно всего рисунка, а не только панели графика.
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.")
Добавление к ответу Брэндона Бертельсена: если вы хотите иметь подпись в левом углу, добавьте
theme(plot.caption = element_text(hjust = 0))