我正在尝试将多个生成的图存储ggplot2
到列表中。
我试图使用上一个线程中建议的列表函数,但是我很难创建自己的函数来满足自己的需求。
首先,我使用以下代码将基于数据因子的数据框拆分为一个列表:
heatlist.germ <- split(heatlist.germ, f=as.factor(heatlist.germ$plot))
之后,我尝试创建一个列表函数,以后可以使用lapply
它。
plot_data_fcn <- function (heatlist.germ) {
ggplot(heatlist.germ[[i]], aes(x=posX, y=posY, fill=germ_bin)) +
geom_tile(aes(fill=germ_bin)) +
geom_text(aes(label=germ_bin)) +
scale_fill_gradient(low = "gray90", high="darkolivegreen4") +
ggtitle(plot) +
scale_x_continuous("Position X", breaks=seq(1,30)) +
scale_y_continuous("Position Y (REVERSED)", breaks=seq(1,20))
}
heatlist.test <- lapply(heatlist.germ[[i]], plot_data_fcn)
我要完成的两件事:
plot
)存储在列表中。任何帮助,将不胜感激。
我没有您的数据,因此我将简化绘图机制。
第一个问题是您不应[[i]]
在函数中使用引用。只是让您的函数按原样处理数据,它实际上不知道其参数是(在另一个环境中)带有列表的元素。它只知道对象本身。
# a simple plot function
myfunc <- function(x) ggplot(x, aes_string(names(x)[1], names(x)[2])) + geom_point()
# a list of frames, nothing fancy here
datalist <- replicate(3, mtcars, simplify = FALSE)
# just call it ...
myplots <- lapply(datalist, myfunc)
class(myplots[[1]])
# [1] "gg" "ggplot"
当myfunc
被调用时,它的参数x
仅仅是一个data.frame
,该函数具有不知道x
是在帧的列表中的第一(或第二或第三)帧。
如果要在第n个框架中包含一个索引,以指示该元素是哪个元素,那么在我看来,这是将数据“压缩”在一起的方式,因此建议使用Map
。(您也可以使用purrr::imap
或相关的tidyverse函数。)
myfunc2 <- function(x, title = "") ggplot(x, aes_string(names(x)[1], names(x)[2])) + geom_point() + labs(title = title)
myplots <- Map(myfunc2, datalist, sprintf("Plot number %s", seq_along(datalist)))
class(myplots[[1]])
# [1] "gg" "ggplot"
要了解Map
与之间的关系lapply
,lapply(datalist, myfunc)
则应了解它与以下内容“关联”:
myfunc(datalist[[1]])
myfunc(datalist[[2]])
myfunc(datalist[[3]])
Map
但是,使用,需要一个函数,该函数必须在每个调用中接受一个或多个参数。这样,就Map
可以接受与函数接受参数一样多的列表(或向量)。这两个功能是同步的
lapply(datalist, myfunc) # data first, function second
Map(myfunc, datalist) # function first, data second
并展开了一个更复杂的呼叫,如下所示:
titles <- sprintf("Plot number %d", seq_along(datalist)) # "Plot number 1", ...
Map(myfunc2, datalist, titles)
# equivalent to
myfunc2(datalist[[1]], titles[[1]])
myfunc2(datalist[[2]], titles[[2]])
myfunc2(datalist[[3]], titles[[3]])
只要参数的长度相同(或长度为1),每个参数是否为true list
(如datalist
)或矢量(如titles
)并不重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句