[英]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)
作為替代方案,您可以使用來自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.