无法将 ggplots 网格保存到文件
Trouble saving grid of ggplots to file
我正在尝试将 ggplots 网格作为 .png 格式保存在我的硬盘上,但未能成功,希望能为我的代码故障排除提供帮助。
这是一个使用 public 乐高星球大战套装数据重现我的错误的示例:
library(dplyr)
library(ggplot2)
library(grid)
library(gridExtra)
# Load the Lego data and subset it to Lego Star Wars sets
Lego <- read.csv("https://raw.githubusercontent.com/seankross/lego/master/data-tidy/legosets.csv", stringsAsFactors=FALSE)
Lego.SW <- filter(Lego, Theme=="Star Wars")
# Make a list with the ggplot objects to plot
lego_plot_list = list()
lego_plot_list[[1]] = ggplot(tally(group_by(Lego.SW, Year)), aes(x=Year, y=n)) + geom_line() + theme_bw() + ylab("Number of sets released")
lego_plot_list[[2]] = ggplot(Lego.SW, aes(Pieces)) + geom_histogram(binwidth=10) + theme_bw() + ylab("Number of sets")
lego_plot_list[[3]] = ggplot(Lego.SW, aes(USD_MSRP)) + geom_histogram(binwidth=10) + theme_bw() + xlab("Price (USD)") + ylab("Number of sets")
lego_plot_list[[4]] = ggplot(Lego.SW, aes(x=Pieces, y=USD_MSRP)) + geom_point() + theme_bw() + xlab("Number of pieces") + ylab("Price")
# Make the plots
lego.grid = marrangeGrob(lego_plot_list, nrow=2, ncol=2, top="")
lego.grid # show in terminal to make sure we're getting what we want
ggsave("legostarwars.png", lego.grid)
这是我在该过程结束时遇到的错误,无论我之前是否在终端中显示 lego.grid
:
Error in ggsave("legostarwars.png", lego.grid) :
plot should be a ggplot2 plot
我认为我的代码遵循arrangeGrob()
文档中给出的示例,并且我在相关问题中没有看到不同的解决方案。抱歉,如果我忽略了什么,这是重复的。
如果相关,这是我的会话信息:
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.4.2 gridExtra_2.0.0 ggplot2_1.0.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 assertthat_0.1 digest_0.6.8 MASS_7.3-43 R6_2.1.0 plyr_1.8.3 DBI_0.3.1 gtable_0.1.2 magrittr_1.5
[10] scales_0.2.5 stringi_0.5-5 lazyeval_0.1.10 reshape2_1.4.1 labeling_0.3 proto_0.3-10 tools_3.2.1 stringr_1.0.0 munsell_0.4.2
[19] parallel_3.2.1 colorspace_1.2-6
如果 ggsave
对于结果不是强制性的,另一种方法是使用函数 png
,它将通过以下代码产生类似(如果不相同)的结果:
png('legostarwars.png')
lego.grid
dev.off()
在 R 3.2.2
中使用 dplyr/ggplot2
的开发版本,它对我有用。
lego.grid <- marrangeGrob(lego_plot_list, nrow=2, ncol=2, top="")
grid.newpage()#from @baptiste's comments
ggsave("legostarwars.png", lego.grid)
#Saving 7 x 6.99 in image
sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.2 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] lazyeval_0.1.10.9000 gridExtra_2.0.0 ggplot2_1.0.1.9003
[4] data.table_1.9.5 dplyr_0.4.3.9000 overflow_0.2-1
[7] stringr_1.0.0 reshape2_1.4.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 assertthat_0.1 chron_2.3-45 plyr_1.8.2
[5] R6_2.0.1 gtable_0.1.2 DBI_0.3.1 magrittr_1.5
[9] scales_0.3.0 stringi_0.5-1 labeling_0.3 tools_3.2.2
[13] munsell_0.4.2 parallel_3.2.2 colorspace_1.2-6
如果您要保存到单个 png 文件,您可能不是要使用 marrangeGrob()
(m 多页),而是 arrangeGrob()
.
您看到的错误是由于 ggplot2::ggsave
中的检查引起的,它应该会在下一个版本中消失。同时,您可以显式调用 png()
,或安装 ggplot2 的开发版本。
我正在尝试将 ggplots 网格作为 .png 格式保存在我的硬盘上,但未能成功,希望能为我的代码故障排除提供帮助。
这是一个使用 public 乐高星球大战套装数据重现我的错误的示例:
library(dplyr)
library(ggplot2)
library(grid)
library(gridExtra)
# Load the Lego data and subset it to Lego Star Wars sets
Lego <- read.csv("https://raw.githubusercontent.com/seankross/lego/master/data-tidy/legosets.csv", stringsAsFactors=FALSE)
Lego.SW <- filter(Lego, Theme=="Star Wars")
# Make a list with the ggplot objects to plot
lego_plot_list = list()
lego_plot_list[[1]] = ggplot(tally(group_by(Lego.SW, Year)), aes(x=Year, y=n)) + geom_line() + theme_bw() + ylab("Number of sets released")
lego_plot_list[[2]] = ggplot(Lego.SW, aes(Pieces)) + geom_histogram(binwidth=10) + theme_bw() + ylab("Number of sets")
lego_plot_list[[3]] = ggplot(Lego.SW, aes(USD_MSRP)) + geom_histogram(binwidth=10) + theme_bw() + xlab("Price (USD)") + ylab("Number of sets")
lego_plot_list[[4]] = ggplot(Lego.SW, aes(x=Pieces, y=USD_MSRP)) + geom_point() + theme_bw() + xlab("Number of pieces") + ylab("Price")
# Make the plots
lego.grid = marrangeGrob(lego_plot_list, nrow=2, ncol=2, top="")
lego.grid # show in terminal to make sure we're getting what we want
ggsave("legostarwars.png", lego.grid)
这是我在该过程结束时遇到的错误,无论我之前是否在终端中显示 lego.grid
:
Error in ggsave("legostarwars.png", lego.grid) :
plot should be a ggplot2 plot
我认为我的代码遵循arrangeGrob()
文档中给出的示例,并且我在相关问题中没有看到不同的解决方案。抱歉,如果我忽略了什么,这是重复的。
如果相关,这是我的会话信息:
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.4.2 gridExtra_2.0.0 ggplot2_1.0.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 assertthat_0.1 digest_0.6.8 MASS_7.3-43 R6_2.1.0 plyr_1.8.3 DBI_0.3.1 gtable_0.1.2 magrittr_1.5
[10] scales_0.2.5 stringi_0.5-5 lazyeval_0.1.10 reshape2_1.4.1 labeling_0.3 proto_0.3-10 tools_3.2.1 stringr_1.0.0 munsell_0.4.2
[19] parallel_3.2.1 colorspace_1.2-6
如果 ggsave
对于结果不是强制性的,另一种方法是使用函数 png
,它将通过以下代码产生类似(如果不相同)的结果:
png('legostarwars.png')
lego.grid
dev.off()
在 R 3.2.2
中使用 dplyr/ggplot2
的开发版本,它对我有用。
lego.grid <- marrangeGrob(lego_plot_list, nrow=2, ncol=2, top="")
grid.newpage()#from @baptiste's comments
ggsave("legostarwars.png", lego.grid)
#Saving 7 x 6.99 in image
sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.2 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] lazyeval_0.1.10.9000 gridExtra_2.0.0 ggplot2_1.0.1.9003
[4] data.table_1.9.5 dplyr_0.4.3.9000 overflow_0.2-1
[7] stringr_1.0.0 reshape2_1.4.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 assertthat_0.1 chron_2.3-45 plyr_1.8.2
[5] R6_2.0.1 gtable_0.1.2 DBI_0.3.1 magrittr_1.5
[9] scales_0.3.0 stringi_0.5-1 labeling_0.3 tools_3.2.2
[13] munsell_0.4.2 parallel_3.2.2 colorspace_1.2-6
如果您要保存到单个 png 文件,您可能不是要使用 marrangeGrob()
(m 多页),而是 arrangeGrob()
.
您看到的错误是由于 ggplot2::ggsave
中的检查引起的,它应该会在下一个版本中消失。同时,您可以显式调用 png()
,或安装 ggplot2 的开发版本。