2017-03-10 114 views
0

事先道歉,我已經做了一點哈希。我有一個相對較大的數據集,如下所示:R Plot使用For循環的多圖函數

這裏存在問題。我一直在創建GLM,從中我可以估計出混雜變量和夾具的基準線(如果你不知道我在這裏的意思,基本上我需要計算我的最佳擬合線,而不是通過平均值點)。這一切都很好,很棒,因爲我製作了一行代碼,可以解決這個問題。可悲的是,我有19張這樣的圖 - 每行1張 - 需要爲6組數據做這件事。

我試圖使這個過程自動化,到目前爲止是痛苦和壓抑。如果有人認爲成爲生物學家就意味着擁抱熊貓,那麼他們是錯誤的。我已經得到了代碼來獲取變量並一次生成一個圖形,但沒有任何運氣在一幀中生成它們。

大致想象一下,但有19個圖。這就是現在的夢想 ![大致想象一下,但有19張圖。這是現在的夢想] [2]

回答

1

不幸的是,您的數據不是reproducible,但我認爲可以改編以下內容。

使用這樣的幾個對象可能會變得非常混亂。這是使用list可以非常有用的地方。你只需要你的x,y和在my_list對象中的攔截。然後,您可以使用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)                       
}  

enter image description here

1

只是想後的你正在試圖做的,看看是否有可能爲你工作,以及什麼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個單獨的「方面」的情節都在相同的規模和在同一個圖形窗口。面與最佳擬合線 plot of facets with best fit lines

# 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) 

情節最後,數據方面再次繪製的,而是由鳶尾花的品種有色和每個物種都有自己最適合的路線。與類別 plots of facets with best fit within categories

內最適合的方面的

# 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) 

情節我看到你所提到的,你有你自己的預先計算最佳擬合線,但是我覺得這個概念可能讓你更接近你需要呢?

乾杯!