【发布时间】:2014-05-09 23:03:41
【问题描述】:
我需要显示 1-3 个图表,并且我希望图表的标题基于所使用的变量名称。
我可以让它按照我想要的方式在下面工作:
library(grid)
library(ggplot2)
library(gridExtra)
a1 <- sample(1:100)
a2 <- sample(1:100)
a3 <- sample(1:100)
make_graph <- function(x, y=deparse(substitute(x))){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
g1 <- make_graph(a1)
g2 <- make_graph(a2)
g3 <- make_graph(a3)
grid.arrange(g1,g2,g3)
但是,如果只有 1 或 2 个样本(即只有 a1 或 a1 和 a2),我需要包含条件语句时,这会变得低效。
除了正确的标题之外,我在下面得到了一切工作:
library(grid)
library(ggplot2)
library(gridExtra)
a1 <- sample(1:100)
a2 <- sample(1:100)
a3 <- sample(1:100)
sample_list <- paste0("a", seq_len(3))
make_graph <- function(x, y=deparse(substitute(x))){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
graphs_list <- lapply(mget(sample_list), make_graph)
do.call("grid.arrange", graphs_list)
使用上面的代码,我得到了正确的功能,但是 make_graph() 中的 deparse() 似乎有一些问题,我认为是因为被 lapply 调用。因此,我得到的不是最初示例中的标题(“a1”、“a2”、“a3”),而是“X[[1L]]”、“X[[2L]]”、“X[[ 3L]]"。
我也尝试过改变 lapply 函数,但这只会给我列表中的第一个“标题”:
sample_list <- paste0("a", seq_len(3))
make_graph <- function(x, y){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
graphs_list <- lapply(mget(sample_list), make_graph, y=sample_list)
do.call("grid.arrange", graphs_list)
我不确定完成我在这里尝试做的事情的最佳方法。 感谢您的帮助。
【问题讨论】: