使用 R 中的 colnames() 循环更改绘图的标题
Changing title of plots in a loop with colnames() in R
我正在创建一个 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
每次循环都是一个值向量。这可能 "work" 在某种意义上 ggplot 会产生一个情节,但它打破了提供给 ggplot 的数据框(在这种情况下为 df
)和 [=14 的映射之间的 link =]'s columns to ggplot's aesthetics.
这里有几个选项,使用内置的 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)
我正在创建一个 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
每次循环都是一个值向量。这可能 "work" 在某种意义上 ggplot 会产生一个情节,但它打破了提供给 ggplot 的数据框(在这种情况下为 df
)和 [=14 的映射之间的 link =]'s columns to ggplot's aesthetics.
这里有几个选项,使用内置的 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)