[英]R Plot Multiple Graph Function with For Loop
事先表示歉意,我對此做了一些介紹。 我有一個相對較大的數據集,如下所示:
問題就在這里。 我一直在創建GLM,從中我獲取混雜變量的估計值並略過(如果您不明白我的意思,基本上,我需要計算我的最佳擬合線,而不僅僅是推算平均值點)。 當我編寫一行代碼為我解決這些問題時,這一切都很好。 但是,令人遺憾的是,我要生成其中的19個圖形-每行1個圖形-並且需要對6個數據集進行此操作。
迄今為止,我試圖使這一過程自動化的努力令人痛苦和沮喪。 如果有人認為生物學家意味着擁抱大熊貓,那就可悲了。 我有代碼來接受變量並一次生成一個圖,但是沒有運氣可以在一幀上全部生成它們。
大致想象一下,但是上面有19個圖形。 這就是現在的夢想![大致想象一下,但是上面有19張圖。 這就是現在的夢想] [2]
不幸的是,您的數據不可重現,但我認為可以改編以下內容。
使用這樣的幾個對象會變得非常混亂。 這是使用list
非常有用的地方。 您只需要在my_list
對象中使用x,y和攔截。 然后,您可以使用layout
和循環繪制所有圖表。
my_list <- list()
for(i in 1:19){
x <- runif(10)
y <- rnorm(10)
intercept <- lm(y~x)$coefficients[1]
name <- paste('plot_',i,sep='')
tmp <- list(x=x, y=y, intercept=intercept)
my_list[[name]] <- tmp
}
layout(matrix(1:20, nrow = 4, ncol = 5, byrow = TRUE))
for(j in 1:length(my_list)) {
plot(x=my_list[[j]]$x, y=my_list[[j]]$y, main=attributes(my_list[j])$names,xlab="x-label",ylab="y-label")
abline(h=my_list[[j]]$intercept)
}
只是想發布您要執行的操作的ggplot2版本,以查看它是否也對您有用。
我還展示了一個示例,該示例針對每個構面內的多個類進行擬合線擬合(取決於您進行的分析的復雜程度)。
如果尚未安裝ggplot2,請先安裝它:
# install.packages('ggplot2')
library(ggplot2)
在這里,我只是使用內置的虹膜數據集設置一些虛擬數據。 我實質上是在嘗試模擬19個不同的數據集。
set.seed(1776)
samples <- list()
num_datasets <- 19
datasets <- list(num_datasets)
# dynamically create some samples
for(i in 1:num_datasets) {
samples[[i]] <- sample(1:nrow(iris), 20)
}
# dynamically assign to many data sets (keep only 2 numeric columns)
for(i in 1:num_datasets) {
datasets[[i]] <- cbind(iris[samples[[i]], c('Petal.Length', 'Petal.Width', 'Species')], dataset_id = i)
# assign(paste0("dataset_", i), iris[samples[[i]], c('Petal.Length', 'Petal.Width')])
}
do.call
有點棘手,但是它包含兩個參數,一個函數和一個應用於該函數的參數列表。 因此,我在數據datasets
對象(這是數據集列表)內的所有不同數據集上使用rbind()
)。
combined_data <- do.call(rbind, datasets)
第一個圖是顯示數據的一個大散點圖。
# all data
ggplot(data=combined_data, aes(x=Petal.Length, y=Petal.Width)) +
geom_point(alpha = 0.2) +
ggtitle("All data")
接下來是19個單獨的“方面”,全部在相同的比例和相同的圖形窗口中。
# all data faceted by dataset_id
ggplot(data=combined_data, aes(x=Petal.Length, y=Petal.Width)) +
geom_point(alpha = 0.5) +
ggtitle("All data faceted by dataset") +
facet_wrap(~ dataset_id) +
geom_smooth(method='lm', se = F)
具有最佳擬合線的刻面圖
最終,數據再次以小平面繪制,但由鳶尾花的種類着色,每種種類都有自己的最佳擬合線。
# all data faceted by dataset_id
ggplot(data=combined_data, aes(x=Petal.Length, y=Petal.Width, color = Species)) +
geom_point(alpha = 0.5) +
ggtitle("All data faceted by dataset with best fit lines per species") +
facet_wrap(~ dataset_id) +
geom_smooth(method='lm', se = F)
最適合類別的構面圖
我看到您提到您有自己的預先計算的最佳擬合線,但是我認為從概念上講,這可能使您更接近所需的位置?
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.