0

我有 tsv 文件,它们都有一列和相同的行数。我正在使用 ggplot (stat_smooth) 绘制它们,但我希望程序灵活stat_smooth,这意味着根据提供的文件数量作为输入添加更多函数调用。

输入的长度取自length(commandArgs(TRUE)) ,我将数据存储在一个变量中

cov=data.frame(sapply(1:length(commandArgs(TRUE)),
    function(i)read.csv(proteins[i],sep='\t',colClasses=c(NA,"NULL"))))

文件在哪里proteins<-commandArgs(TRUE),我正在colnames使用另一个代码添加。

现在,问题出现在 ggplot 上,我如何smooth_line根据提供的参数数量调用 ggplot 以即时调用。

我正在尝试类似的东西,

m=ggplot(cov,aes(seq,cov[,2]))
p=function(i){return(stat_smooth(aes(color=colnames(cov)[i])))}
m+p(1)+.....

使用 a添加p到核心 ggplot 绘图启动器,但这似乎没有意义。mfor loop

应该有一种更有效的方法。这个想法是根据covdata.frame 中的列构建调用,其中的数据如下

seq    fileA fileB
1 8429.262  8606.623
2 8766.138  9066.361
3 9081.893  9456.915
4 9342.380  9784.373
5 9480.860 10067.121
6 9581.437 10312.253

有人可以提出一些建议吗?

4

1 回答 1

1

首先,将您的数据重塑为每行一个值的长格式。

library(reshape2)
covM <- melt(cov, id.var = "seq")

这将返回以下数据框:

   seq variable     value
1    1    fileA  8429.262
2    2    fileA  8766.138
3    3    fileA  9081.893
4    4    fileA  9342.380
5    5    fileA  9480.860
6    6    fileA  9581.437
7    1    fileB  8606.623
8    2    fileB  9066.361
9    3    fileB  9456.915
10   4    fileB  9784.373
11   5    fileB 10067.121
12   6    fileB 10312.253

一旦有了新对象,就很容易绘制:

library(ggplot2)
ggplot(covM, aes(seq, value)) +
  stat_smooth(aes(color = variable))

在此处输入图像描述

于 2013-03-14T17:27:21.037 回答