网格从评估的文本中排列多个 ggplots
Grid Arrange mutliple ggplots from evaluated text
我正在尝试 grid.arrange()
从一串文本中 call/evaluate 我需要的几个 ggplots。然而,我失败得很惨——只绘制了最后一个图(在下面的示例中为p4
)。
library(ggplot2)
library(gridExtra)
p <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = cyl))
p1 <- p + geom_point()
p2 <- p + geom_histogram()
p3 <- p + geom_dotplot()
p4 <- p + geom_smooth(method='lm')
tx <- paste0("p", 1:4)
grid.arrange(grobs = list(eval(parse(text = tx))), nrow = 2)
我该如何解决这个问题?
利用 lapply
这可以像这样实现:
注意:为了使 geom_histogram
和 geom_dotplot
工作,我将 y = wt
设为 geom_point
和 geom_smooth
的本地 aes,否则您的代码会生成出错了。
library(ggplot2)
library(gridExtra)
p <- ggplot(data = mtcars, aes(x = mpg, color = cyl))
p1 <- p + geom_point(aes(y = wt))
p2 <- p + geom_histogram()
p3 <- p + geom_dotplot()
p4 <- p + geom_smooth(aes(y = wt), method='lm')
tx <- paste0("p", 1:4)
grid.arrange(grobs = lapply(tx, function(x) eval(parse(text = x))), nrow = 2)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
#> `geom_smooth()` using formula 'y ~ x'
我正在尝试 grid.arrange()
从一串文本中 call/evaluate 我需要的几个 ggplots。然而,我失败得很惨——只绘制了最后一个图(在下面的示例中为p4
)。
library(ggplot2)
library(gridExtra)
p <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = cyl))
p1 <- p + geom_point()
p2 <- p + geom_histogram()
p3 <- p + geom_dotplot()
p4 <- p + geom_smooth(method='lm')
tx <- paste0("p", 1:4)
grid.arrange(grobs = list(eval(parse(text = tx))), nrow = 2)
我该如何解决这个问题?
利用 lapply
这可以像这样实现:
注意:为了使 geom_histogram
和 geom_dotplot
工作,我将 y = wt
设为 geom_point
和 geom_smooth
的本地 aes,否则您的代码会生成出错了。
library(ggplot2)
library(gridExtra)
p <- ggplot(data = mtcars, aes(x = mpg, color = cyl))
p1 <- p + geom_point(aes(y = wt))
p2 <- p + geom_histogram()
p3 <- p + geom_dotplot()
p4 <- p + geom_smooth(aes(y = wt), method='lm')
tx <- paste0("p", 1:4)
grid.arrange(grobs = lapply(tx, function(x) eval(parse(text = x))), nrow = 2)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
#> `geom_smooth()` using formula 'y ~ x'