如何解决R-保存使用地图创建的ggplot对象
假设我们运行以下代码:
iris %>%
group_split(Species) %>%
map(~ggplot(.,aes(x = Sepal.Length,y = Sepal.Width))+
geom_point())
这将创建三个单独的散点图,分别是“隔片长度”与“隔片宽度”,并按物种分组。
但是,现在,我想将这三个文件另存为.png。我希望它们被称为setosa.png
,versicolor.png
和virginica.png
。如何在不离开map
“ loop ”的情况下执行此操作?我知道我可以将图表保存在列表中,然后调用for
循环将其保存,但这是我要避免的具体事情。
我想这样开始:
iris %>%
group_split(Species) %>%
map(~ggplot(.,y = Sepal.Width))+
geom_point()) %>%
map(ggsave)
但是由于我没有提供文件名,所以此代码将失败。那怎么办呢?
解决方法
在同一map
中执行此操作,而不要添加另一个map
命令。您可以从Species
列中提取first
值来获取文件名。
library(dplyr)
library(ggplot2)
iris %>%
group_split(Species) %>%
purrr::map(~ggsave(paste0(first(.$Species),'.png'),ggplot(.,aes(x = Sepal.Length,y = Sepal.Width))+
geom_point()))
,
这是不用purrr
的另一种方式。但是,它需要创建一个自定义函数:
library(dplyr)
library(ggplot2)
save_plots <- function(df) {
sapply(1:nrow(df),function(v) {ggsave(filename = paste(df$Species[v],"png",sep="."),plot = df$plot[v][[1]],device = "png")})
}
iris %>%
nest_by(Species) %>%
mutate(plot = list(ggplot(data,y = Sepal.Width))+
geom_point())) %>%
save_plots()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。