-
Notifications
You must be signed in to change notification settings - Fork 0
/
smooth_lines.R
103 lines (99 loc) · 3.68 KB
/
smooth_lines.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env Rscript
args <- commandArgs(TRUE)
usage=function(){
cat('Description:This script plot smooth lines in a single plot.\n',file=stderr())
cat('Usage:lines.R -i=input.tsv -d=100 -x="Position" -y="Signal value" -o=lines.pdf\n',file=stderr())
cat('Option:\n',file=stderr())
cat('\t-i\tFILE\tThe tab delimted input data to plot lines(The first column is the x values and the following comumns are y values)\n',file=stderr())
cat('\t-d\tINT\tdf parameter for smooth.spline function[default:Rows number/10]\n',file=stderr())
cat('\t-x1\tINT\tThe xlim start(Optional)\n',file=stderr())
cat('\t-x2\tINT\tThe xlim end(Optional)\n',file=stderr())
cat('\t-y1\tINT\tThe ylim start(Optional)\n',file=stderr())
cat('\t-y2\tINT\tThe ylim end(Optional)\n',file=stderr())
cat('\t-x\tSTRING\tThe x title[Class]\n',file=stderr())
cat('\t-y\tSTRING\tThe y title[Value]\n',file=stderr())
cat('\t-c\tSTRING\tThe colors for each line separated by comma(Optional).\n',file=stderr())
cat('\t-l\tSTRING\tThe legend names for each line separated by comma(Optional).\n',file=stderr())
cat('\t-m\tSTRING\tThe title for the plot(Optional).\n',file=stderr())
cat('\t-o\t\tFILE\tOutput file name[smoothLines.pdf]\n',file=stderr())
cat('\t-h\t\tPrint this help information.\n',file=stderr())
q(save="no")
}
xlab="class"
ylab="value"
out="smoothLines.pdf"
if(length(args)==0 || args[1]=="-h"){
usage()
}else{
for(i in 1:length(args)){
arg=args[i]
if(grepl('^-i=', arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
if(is.na(arg.split[2])){
stop('Please specify the input file -i')
}else{
inFile=arg.split[2]
}
}else if(grepl('^-x=',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
xlab=arg.split[2]
}else if(grepl('^-y=',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
ylab=arg.split[2]
}else if(grepl('^-o=',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
out=arg.split[2]
}
}
}
if(exists("inFile")){
data<-read.delim(file=inFile,comment.char = "#",header=F)
}else{
data<-read.delim(file('stdin'), header = F)
}
colNum = ncol(data)
x1=min(data[,1])
x2=max(data[,1])
y1=min(data[,-1])
y2=max(data[,-1])
colors<-colors()[1:(colNum-1)]
legends<-as.vector(mapply(paste,"sample",sep='',c(1:(colNum-1))))
main=""
df=floor(nrow(data)/10)
for(i in 1:length(args)){
arg=args[i]
if(grepl('^-c=',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
colors=strsplit(arg.split[2],',',fixed = T)[[1]]
}else if(grepl('^-x1',arg)){
arg.split=strsplit(arg, '=', fixed = T)[[1]]
x1=arg.split[2]
}else if(grepl('^-x2',arg)){
arg.split=strsplit(arg, '=', fixed = T)[[1]]
x2=arg.split[2]
}else if(grepl('^-y1',arg)){
arg.split=strsplit(arg, '=', fixed = T)[[1]]
y1=as.numeric(arg.split[2])
}else if(grepl('^-y2',arg)){
arg.split=strsplit(arg, '=', fixed = T)[[1]]
y2=as.numeric(arg.split[2])
}else if(grepl('^-l',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
legends=strsplit(arg.split[2],',',fixed = T)[[1]]
}else if(grepl('^-m',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
main=strsplit(arg.split[2],',',fixed = T)[[1]]
}else if(grepl('^-d',arg)){
arg.split = strsplit(arg, '=', fixed = T)[[1]]
df=as.numeric(strsplit(arg.split[2],',',fixed = T)[[1]])
}
}
pdf(file=out)
plot(data[,1],data[,2],xlab=xlab,ylab=ylab,type="n",xlim=c(x1,x2),ylim=c(y1,y2),main=main)
if(ncol(data)>=2){
for(i in 2:colNum){
lines(smooth.spline(data[,1],data[,i], df=df), col = colors[i-1])
}
legend("topright",legends,col=colors,lty=1)
}
dev.off()