簡體   English   中英

R 循環通過一組列來制作幾個圖

[英]R Loop through a group of columns to make several plots

我需要從我的數據框上的一些列制作幾個散點圖,所以我決定做一個循環,但我不知道如何將它設置為僅在我感興趣的列上進行迭代。 我的代碼如下所示:

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))]
}

但是這種方式不適合我的數據框,因為它遍歷所有列並且我只對一組感興趣。

您可以使用 colnames 進行迭代,而不是使用 i 進行迭代,如下所示。 從 gridExtra 對 grid.arrange() 的調用只是對 plot 一個圖形中的所有圖 - 你可以 plot 這些隨你喜歡(我發現將它們存儲在列表中很方便)。

下面的代碼僅迭代 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

作為替代方案,您可以使用來自pivot_longer package 的tidyr重塑數據框,以便將所有col_x列(假設它們具有唯一的列名)堆疊到一個分類列和關聯的values列中。 有了這個,您可以在ggplot facet_wrap創建一個 facet plot 為每個組合生成單獨的散點圖。

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)

看起來像這樣: 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM