我有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,我如何根据提供的参数数量来调用ggplot来进行smooth_line
调用。
我正在尝试类似的东西,
m=ggplot(cov,aes(seq,cov[,2]))
p=function(i){return(stat_smooth(aes(color=colnames(cov)[i])))}
m+p(1)+.....
使用p
将m
添加到核心ggplot图启动器for loop
,但这似乎没有意义。
应该有一种更有效的方法。想法是根据cov
data.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
有人可以提出建议吗?
答案 0 :(得分: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))