2017-03-10 117 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) 

情节我看到你所提到的,你有你自己的预先计算最佳拟合线,但是我觉得这个概念可能让你更接近你需要呢?

干杯!