我正在创建一个for循环,为数据框中前六列的每一列创建一个ggplot2图。除了标题名称的循环之外,一切都正常。我一直在尝试使用 title = colnames(df[,i])
和 title = paste0(colnames(df[,i])
来创建正确的标题,但它最终只是重复了第二列的名称。绘图本身为每一列正确地生成数据,但标题由于某种原因没有循环。对于第一张图,它产生了正确的标题,但是对于第二张图以及更多的图,它只是一直重复第三列的名称,完全跳过了第二列的名称。我甚至尝试在循环中创建一个变量来存储各自的标题名称,然后在ggplot2标题标签中使用。changetitle <- colnames(df[,i])
然后使用 title = changetitle
但这也是循环不正确的。
下面是我目前的一个例子。
plot_6 <- list()
for(i in df[1:6]){
plot_6[i] <- print(ggplot(df, aes(x = i, ...) ...) +
... +
labs(title = colnames(df[,i]),
x = ...) +
...)
}
非常感谢你
df[1:6]
是一个有六列的数据框架。当作为一个循环变量使用时,结果是 i
每次通过循环时都是一个值的向量。这样做可能会 "有效",因为 ggplot 会生成一个图,但它打破了提供给 ggplot 的数据框架之间的联系 (df
在这种情况下)和 df
的列,以符合ggplot的美学要求。
这里有几个选项,使用内置的 mtcars
数据框架。
library(tidyverse)
library(patchwork)
plot_6 <- list()
for(i in 1:6) {
var = names(mtcars)[i]
plot_6[[i]] <- ggplot(mtcars, aes(x = !!sym(var))) +
geom_density() +
labs(title = var)
}
# Use column names directly as loop variable
for(i in names(mtcars)[1:6]) {
plot_6[[i]] <- ggplot(mtcars, aes(x = !!sym(i))) +
geom_density() +
labs(title = var)
}
# Use map, which directly generates a list of plots
plot_6 = map(names(mtcars)[1:6],
~ggplot(mtcars, aes(x = !!sym(.x))) +
geom_density() +
labs(title = .x)
)
其中任何一个都会产生相同的图谱列表。
wrap_plots(plot_6)