繁体   English   中英

在 R 中使用 colnames() 更改循环中的绘图标题

[英]Changing title of plots in a loop with colnames() in R

我正在创建一个 for 循环,该循环为 dataframe 中的前六列中的每一列创建一个 ggplot2 plot。 除了标题名称的循环之外,一切正常。 我一直在尝试使用title = colnames(df[,i])title = paste0(colnames(df[,i])来创建正确的标题,但它最终只是重复了第二列名称。这些图本身会产生每列的数据正确,但标题由于某种原因没有循环.对于第一个 plot 它产生正确的标题,但是对于第二个 plot 及以后它只是继续重复第三列名称,完全跳过第二列我什至尝试在循环中创建一个变量来存储相应的标题名称,然后在 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 将产生 plot 的意义上说,这可能“有效”,但它打破了提供给 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)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM