【问题标题】:R Loop through a group of columns to make several plotsR遍历一组列以制作多个图
【发布时间】:2020-09-16 09:44:08
【问题描述】:

我需要从我的数据框上的一些列中制作几个散点图,所以我决定制作一个循环,但我不知道如何将它设置为仅在我感兴趣的列上进行迭代。 我的代码如下所示:

col_xVScol_y<-ggplot(data=df, aes(x=col_x, y=col_y)) + 
geom_point(aes(color= col_z))

col_y 和 col_z 总是相同的,我只需要遍历一组代替 col_x 的列

我已经看到您可以使用 colnames() 遍历列,例如:

for(i in colnames(df)){
    col_xVScol_y<-ggplot(data=df, aes(x=col_x, y=col_y)) + 
    geom_point(aes(color= col_z))]
}

但是这种方式不适合我的数据框,因为它会遍历所有列,而我只对一组感兴趣。

【问题讨论】:

  • 我将使用 tidyr 包中的 pivot_longer 重塑数据框,以便您的所有 col_x 列(假设它们具有唯一的列名)堆叠到一个分类 names 列中关联的value 列。

标签: r loops plot


【解决方案1】:

作为替代方案,您可以使用 tidyr 包中的 pivot_longer 重塑数据框,以便您的所有 col_x 列(假设它们具有唯一的列名)堆叠成一个分类列和关联的 @987654326 @ 柱子。有了这个,您可以在 ggplot 中使用 facet_wrap 并创建一个分面图,为每个组合生成单独的散点图。

library(dplyr)
library(tidyr)
library(ggplot2)

    data <- mtcars %>%
  select(mpg, cyl, disp, hp, wt) %>%
  pivot_longer(cols = c("mpg", "disp", "hp"),
               names_to = "Columns",
               values_to = "Values") 

ggplot(data = data, aes(x = Values, y = wt, colour = as.factor(cyl))) +
         geom_point() +
         facet_wrap(. ~ Columns)

看起来像这样:

【讨论】:

  • 谢谢你!!这真的很有帮助
  • 如果此回复对您有用,请点赞。
【解决方案2】:

您可以使用 colnames 进行迭代,而不是使用 i 进行迭代,如下所示。从 gridExtra 调用 grid.arrange() 只是为了在一个图形中绘制所有图 - 您可以随意绘制这些图(我发现将它们存储在列表中很方便)。

以下代码仅迭代 mtcar 的某些列。您可以随心所欲地自定义它(通过构建适当的列名或索引向量)。

plot_list <- list()

for(col in colnames(mtcars)[c(9:11)]){

  col_xVScol_y <- ggplot(data=mtcars, aes(x=wt, y=mpg)) + 
                  geom_point(aes_string(color = col)) 

  plot_list[[col]] <- col_xVScol_y
}

print(plot_list)

# library(gridExtra)
# grid.arrange(grobs = plot_list)

Output of above code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多