通过迭代 for 循环创建单个图,将拼凑的图组合在一起
Putting together a patchwork of plots by creating single plots by iterating over a for loop
我想编写一个生成图形网格的 for 循环(就像使用拼凑时一样)。我想 运行 color_list 数据框中每个项目的循环并将其用作美学。
我设法编写了循环,但不确定如何保留所有情节并将它们放在最后。
color_list <- data.frame(color = c("red", "blue", "green", "yellow"))
for(row in 1:nrow(color_list)) {
data %>%
ggplot(aes(x=x,y=y, color = color_list[row,]$color)) +
geom_line()
}
你在找这个吗,如果我误解了你的问题,请告诉我:
library(tidyverse)
library(patchwork)
reduce( map(color_list$color, ~ggplot(mtcars, aes(x=mpg,y=drat)) +
geom_line(color=.x)), `+`)
解释:
patchwork 库使用 plus 运算符将地块相加,知道这一点我们可以使用 reduce 来收集所有地块并将它们相加,类似于 g1 + g2 + g3 ....,注意,我说的是相似不相同,reduce 本质上是减少通过一次获取输入到一个对象,然后再次获取结果并将其应用于下一个对象,因此 on.where g1 、 g2 和 g3 是 ggplot 对象。在这里,我使用 mtcars 数据来做同样的事情。这里的 g1、g2、g3 等是由 map 函数通过迭代颜色创建的。
输出:
您可以创建绘图列表并将其传递给您正在使用的任何绘图库。例如,使用 patchwork::wrap_plots
你可以这样做:
do.call(patchwork::wrap_plots, lapply(color_list$color, function(x) {
ggplot(data, aes(x=x,y=y)) +geom_line(color = x)
})) -> plot
plot
数据
color_list <- data.frame(color = c("red", "blue", "green", "yellow"))
data <- data.frame(x = rnorm(5), y = rnorm(5))
我想编写一个生成图形网格的 for 循环(就像使用拼凑时一样)。我想 运行 color_list 数据框中每个项目的循环并将其用作美学。
我设法编写了循环,但不确定如何保留所有情节并将它们放在最后。
color_list <- data.frame(color = c("red", "blue", "green", "yellow"))
for(row in 1:nrow(color_list)) {
data %>%
ggplot(aes(x=x,y=y, color = color_list[row,]$color)) +
geom_line()
}
你在找这个吗,如果我误解了你的问题,请告诉我:
library(tidyverse)
library(patchwork)
reduce( map(color_list$color, ~ggplot(mtcars, aes(x=mpg,y=drat)) +
geom_line(color=.x)), `+`)
解释: patchwork 库使用 plus 运算符将地块相加,知道这一点我们可以使用 reduce 来收集所有地块并将它们相加,类似于 g1 + g2 + g3 ....,注意,我说的是相似不相同,reduce 本质上是减少通过一次获取输入到一个对象,然后再次获取结果并将其应用于下一个对象,因此 on.where g1 、 g2 和 g3 是 ggplot 对象。在这里,我使用 mtcars 数据来做同样的事情。这里的 g1、g2、g3 等是由 map 函数通过迭代颜色创建的。
输出:
您可以创建绘图列表并将其传递给您正在使用的任何绘图库。例如,使用 patchwork::wrap_plots
你可以这样做:
do.call(patchwork::wrap_plots, lapply(color_list$color, function(x) {
ggplot(data, aes(x=x,y=y)) +geom_line(color = x)
})) -> plot
plot
数据
color_list <- data.frame(color = c("red", "blue", "green", "yellow"))
data <- data.frame(x = rnorm(5), y = rnorm(5))