R绘制具有For循环的多图形函数

时间:2017-03-10 00:44:45

标签: python r plot bioinformatics

提前道歉,我已经做了一点这个问题。我有一个相对较大的数据集,如下所示:

这就是问题所在。我一直在创建GLM,从中我对混杂变量和夹具的估计进行评估(如果你不知道我的意思,基本上我需要计算我的最佳拟合线,而不仅仅是将其推到平均值点)。这一切都很好,花花公子,因为我做了一行代码,这对我有用。遗憾的是,我有19个这样的图表 - 每行1个 - 并且需要为6个数据集执行此操作。

到目前为止,我尝试自动化这个过程一直是痛苦和令人沮丧的。如果有人认为成为一名生物学家意味着拥抱大熊猫,那他们就错了。我已经有了代码来接受变量并一次生成一个图形,但是没有任何运气可以在一帧上生成它们。

想象一下这个,但有19个图表。这就是现在的梦想 ![想象一下这个,但有19张图表。这就是现在的梦想] [2]

2 个答案:

答案 0 :(得分:1)

不幸的是,您的数据不是reproducible,但我认为可以采用以下方法。

使用这样的几个对象可能会非常混乱。这是使用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)                                                                                        
}    

enter image description here

答案 1 :(得分:1)

只是想发布你正在尝试做的ggplot2版本,看看它是否也适合你。

我还展示了在每个方面内为多个类拟合线的示例(取决于您正在进行的分析有多复杂)。

首先安装ggp​​lot2如果你还没有:

Range("B17").Select

ActiveSheet.Pictures.Insert(PhotoLocation).Select  'Insert photograph from file.

Selection.ShapeRange.ScaleWidth 0.2, msoFalse, msoScaleFromTopLeft

这里我只是使用内置的虹膜数据集设置一些虚拟数据。我基本上试图模拟19个不同的数据集。

    Dim p() As Process

    Private Sub CheckIfRunning()
        p = Process.GetProcessesByName("iw5sp")
        If p.Count > 0 Then
            ' Status: Game Not Found!
        Else
            ' Status: Game Found!
        End If
    End Sub

# install.packages('ggplot2') library(ggplot2) 有点棘手,但它包含两个参数,一个函数和一个应用于该函数的参数列表。所以我在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

rbind()

第一个图是显示数据的一个大散点图。

datasets

接下来是绘图的19个单独“方面”,它们都在相同的比例和相同的图形窗口中。

combined_data <- do.call(rbind, datasets)

具有最佳拟合线的刻面图 plot of facets with best fit lines

最后,数据再次以小平面绘制,但由鸢尾花的种类着色,每个物种都有自己的最佳拟合线。

# all data
ggplot(data=combined_data, aes(x=Petal.Length, y=Petal.Width)) +
    geom_point(alpha = 0.2) +
    ggtitle("All data")

在类别中最适合的方面图 plots of facets with best fit within categories

我看到你提到你有自己的预先计算好的最佳拟合线,但我认为这在概念上可能会让你更接近你需要的位置?

干杯!