lapply 内的单独情节标题
Separate plot titles within lapply
我有很多 objects 我想将它们一起绘制在一页上,每个都有一个单独的标题。目前,我有一个绘图标题矢量,我将其输入 lapply 内的 ggtitle,但它仅将此矢量的第一个条目添加到每个绘图。
下面是一个快速而丑陋的最小示例:
library(ggplot2)
library(gridExtra)
#My 'data'
A.a <- rnorm(10)
A.b <- rnorm(30)
lmnames <- ls(pattern = "A.*")
titlenames <- c("Plot A", "Plot B")
plotlist <- list()
#I have a more complex ggplot function in reality, but I'm using qplot here as a placeholder.
plotlist <- lapply(lmnames, FUN=function(x,y){qplot(get(x)) + ggtitle(y)}, y=titlenames)
grid.arrange(grobs = plotlist)
看起来像这样:
您可以看到,两个图都标记为 "Plot A"。我想给每个地块贴上相应的标签。谁能帮我看看我在这里缺少什么?提前致谢。
这很好用:
plotlist <- lapply(1:2, FUN=function(i){qplot(get(lmnames[i])) + ggtitle(titlenames[i])})
或者这样:
plotlist <- apply(data.frame(lmnames, titlenames), 1, FUN=function(x){qplot(get(x[1])) + ggtitle(x[2])})
问题是在两次迭代中,只有 y=titlenames
的第一个值被读入
你的问题是,在你所有的情节中,你的标题是"Plot A" "Plot B",见plotlist[[1]]$labels$title
。
工作代码如下:
plotlist <- lapply(1:length(lmnames), function(x){
qplot(get(lmnames[x])) + ggtitle(titlenames[x])
})
我相信还有更优雅的解决方案。但是这个会起作用。
此致,
J_F
使用 mapply 循环多个变量通常更清晰,
library(ggplot2)
library(gridExtra)
dl <- list("Plot A" = rnorm(10), "Plot B" = rnorm(10))
plot_fun <- function(x, y) qplot(x) + ggtitle(y)
grid.arrange(grobs = Map(plot_fun, x = dl, y = names(dl)))
我有很多 objects 我想将它们一起绘制在一页上,每个都有一个单独的标题。目前,我有一个绘图标题矢量,我将其输入 lapply 内的 ggtitle,但它仅将此矢量的第一个条目添加到每个绘图。
下面是一个快速而丑陋的最小示例:
library(ggplot2)
library(gridExtra)
#My 'data'
A.a <- rnorm(10)
A.b <- rnorm(30)
lmnames <- ls(pattern = "A.*")
titlenames <- c("Plot A", "Plot B")
plotlist <- list()
#I have a more complex ggplot function in reality, but I'm using qplot here as a placeholder.
plotlist <- lapply(lmnames, FUN=function(x,y){qplot(get(x)) + ggtitle(y)}, y=titlenames)
grid.arrange(grobs = plotlist)
看起来像这样:
您可以看到,两个图都标记为 "Plot A"。我想给每个地块贴上相应的标签。谁能帮我看看我在这里缺少什么?提前致谢。
这很好用:
plotlist <- lapply(1:2, FUN=function(i){qplot(get(lmnames[i])) + ggtitle(titlenames[i])})
或者这样:
plotlist <- apply(data.frame(lmnames, titlenames), 1, FUN=function(x){qplot(get(x[1])) + ggtitle(x[2])})
问题是在两次迭代中,只有 y=titlenames
的第一个值被读入
你的问题是,在你所有的情节中,你的标题是"Plot A" "Plot B",见plotlist[[1]]$labels$title
。
工作代码如下:
plotlist <- lapply(1:length(lmnames), function(x){
qplot(get(lmnames[x])) + ggtitle(titlenames[x])
})
我相信还有更优雅的解决方案。但是这个会起作用。
此致, J_F
使用 mapply 循环多个变量通常更清晰,
library(ggplot2)
library(gridExtra)
dl <- list("Plot A" = rnorm(10), "Plot B" = rnorm(10))
plot_fun <- function(x, y) qplot(x) + ggtitle(y)
grid.arrange(grobs = Map(plot_fun, x = dl, y = names(dl)))