так как я до сих пор читал много подобных вопросов о stackoverflow, я не смог найти хорошего решения без обновления ggplot2 до версии для разработки.
Моя проблема, у меня есть несколько скриптов, которые используют arrangeGrob
для создания комбинированного графика из отдельных графиков. Я сохраняю их в переменную и print
эту переменную и/или сохраняю ее с помощью ggsave
. Поскольку многие мои коллеги регулярно обновляют там пакеты (что, я думаю, хорошо), я всегда получаю письма, что мой скрипт больше не работает после обновления до gridExtra 2.0.0
.
Я не уверен, как с этим справиться, так как новая версия ggplot2
, в которой проблема решена, все еще находится в разработке. Я нашел статью. при переполнении стека, чтобы удалить тест, если объект для сохранения является ggplot
, поскольку новая функция arrangeGrob
возвращает объект gtable
, но в моем случае это не удается:
library(ggplot2)
library(grid)
library(gridExtra)
a <- data.frame(x=c(1,2,3),
y=c(2,3,4))
p <- ggplot(a, aes(x, y)) + geom_point()
b <- arrangeGrob(p, p)
grid.draw(b)
ggsave('test.pdf', b)
ggsave <- ggplot2::ggsave
body(ggsave) <- body(ggplot2::ggsave)[-2]
ggsave('test.pdf', b)
Некоторый вывод и ошибка в консоли:
d> grid.draw(b)
d> ggsave('test.pdf', b)
Error in ggsave("test.pdf", b) : plot should be a ggplot2 plot
d> ggsave <- ggplot2::ggsave
d> body(ggsave) <- body(ggplot2::ggsave)[-2]
d> ggsave('test.pdf', b)
Saving 10.5 x 10.7 in image
TableGrob (2 x 1) "arrange": 2 grobs
z cells name grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (2-2,1-1) arrange gtable[layout]
d>
test.pdf
создан, но он каким-либо образом поврежден и не может быть открыт. Также печатается объект gtable
. Так что я думаю, что что-то здесь не так.
Но, как вы можете видеть, я нашел в коде примера, я нашел функцию grid.draw
для построения хотя бы моего комбинированного графика, но я все еще не могу ggsave
после модификации.
Я не хочу использовать «старые» (pdf(file = "test.pdf"); grid.draw(b); dev.off()
) функции сохранения устройства, как это предлагается в эту статью, так как ими очень неудобно пользоваться.
В этом вопросе кто-то спросил, как именно сохранить объект, но в ответ они просто объясняют использование grid.darw
, и он принял ответ как solving the problem
, и пока никто не ответил на мои комментарии.
Так что на данный момент я совершенно не понимаю, как предоставить рабочие сценарии для тех, кто обновил или не обновил до нового пакета gridExtra
. Я думаю, что способ удалить тест в функции ggsave
является лучшим решением, поскольку я могу проверить версии gridExtra
и ggplot2
и просто перезаписать функцию ggsave
в случае, если версии не совпадают, но я не смог заставить его работать.
С нетерпением жду помощи.
ИЗМЕНИТЬ:
может sessionInfo
поможет
d> sessionInfo()
R version 3.2.0 (2015-04-16)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.9.5 (Mavericks)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] gridExtra_2.0.0 ggplot2_1.0.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.1 digest_0.6.8 MASS_7.3-44 plyr_1.8.3 gtable_0.1.2
[6] magrittr_1.5 scales_0.3.0 stringi_1.0-1 reshape2_1.4.1 devtools_1.9.1
[11] proto_0.3-10 tools_3.2.0 stringr_1.0.0 munsell_0.4.2 colorspace_1.2-6
[16] memoise_0.2.1
ggsave
работала так, как предложено в первой ссылке, потому что в противном случае мне придется изменить много строк в моих скриптах... - person drmariod   schedule 20.11.2015ggsave
на вашем примере? - person   schedule 20.11.2015test.pdf
по вашему примеру (ggplot2
версия1.0.1.9003
иgridExtra
версия2.0.0
). - person   schedule 20.11.2015ggplot2 1.0.1.9003
— это версия для разработки, которую также нелегко установить для всех пользователей, поскольку приходится использоватьdevtools
и загружать с github. Поэтому я хотел бы остаться со стабильными версиями, но также использовать функцииggsave
, а не функцииpdf()
иdev.off()
, как я уже упоминал в своем посте. - person drmariod   schedule 20.11.2015ggplot2
версией1.0.1
. Но он работает с версией разработкиggplot2
, версией1.0.1.9003
. - person   schedule 20.11.2015grid.arrange
не работает? - person Chapo   schedule 20.11.2015grid.arrange
напрямую строит график. Но я хочу сохранить объект без его построения или построения позже в сценарии. - person drmariod   schedule 20.11.2015