pets 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/Rakefile +6 -0
- data/bin/area_under_curve_pr.rb +118 -0
- data/bin/association_metrics_average.rb +94 -0
- data/bin/coPatReporter.rb +531 -0
- data/bin/console +14 -0
- data/bin/fmeasure_index.rb +72 -0
- data/bin/get_PR_values.rb +90 -0
- data/bin/get_clusters.R +18 -0
- data/bin/get_network_nodes.rb +197 -0
- data/bin/lines.R +77 -0
- data/bin/merge_by_cluster.rb +62 -0
- data/bin/merge_pairs.rb +138 -0
- data/bin/paco_translator.rb +102 -0
- data/bin/phen2reg.rb +385 -0
- data/bin/phen2reg_predictor_check.rb +297 -0
- data/bin/plot_area.R +71 -0
- data/bin/plot_boxplot.R +21 -0
- data/bin/plot_density.R +46 -0
- data/bin/plot_scatterplot.R +25 -0
- data/bin/reg2phen.rb +116 -0
- data/bin/region_to_patients_generator.rb +84 -0
- data/bin/relate_CI_to_association_value.rb +90 -0
- data/bin/setup +8 -0
- data/bin/standardize_scores.R +40 -0
- data/bin/xyplot_graph.R +60 -0
- data/external_data/biosystems_gene.gz +0 -0
- data/external_data/bsid2info.gz +0 -0
- data/external_data/chromosome_sizes_hg19.txt +24 -0
- data/external_data/gene_data.gz +0 -0
- data/external_data/gene_data_with_pathways.gz +0 -0
- data/external_data/gene_location.gz +0 -0
- data/external_data/hp.obo +146363 -0
- data/external_data/remove +0 -0
- data/lib/pets.rb +6 -0
- data/lib/pets/coPatReporterMethods.rb +77 -0
- data/lib/pets/generalMethods.rb +556 -0
- data/lib/pets/phen2reg_methods.rb +432 -0
- data/lib/pets/version.rb +3 -0
- data/pets.gemspec +47 -0
- data/templates/cohort_report.erb +93 -0
- data/templates/patient_report.erb +209 -0
- metadata +183 -0
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "gephepred"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#Code for calculating F measure for precision-recall curves
|
3
|
+
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
##########################
|
7
|
+
#METHODS
|
8
|
+
##########################
|
9
|
+
|
10
|
+
def load_pr_data(file)
|
11
|
+
counter = 0
|
12
|
+
pr_data = {}
|
13
|
+
File.open(file).each do |line|
|
14
|
+
if counter > 0
|
15
|
+
line.chomp!
|
16
|
+
cutoff, prec, rec, meth = line.split("\t")
|
17
|
+
query = pr_data[meth]
|
18
|
+
pr_info = [cutoff.to_f, prec.to_f, rec.to_f]
|
19
|
+
if query.nil?
|
20
|
+
pr_data[meth] = [pr_info]
|
21
|
+
else
|
22
|
+
query << pr_info
|
23
|
+
end
|
24
|
+
end
|
25
|
+
counter += 1
|
26
|
+
end
|
27
|
+
return pr_data
|
28
|
+
end
|
29
|
+
|
30
|
+
def calculate_youden(pr_data)
|
31
|
+
#the max f_measure is the best cutoff
|
32
|
+
best_cutoffs = []
|
33
|
+
pr_data.each do |meth, pr_values|
|
34
|
+
max_f_measure = 0
|
35
|
+
best_cutoff = 0
|
36
|
+
#next if meth != 'cosine'
|
37
|
+
pr_values.each do |cutoff, prec, rec|
|
38
|
+
f_measure = 2 * prec * rec / (prec + rec)
|
39
|
+
if max_f_measure < f_measure
|
40
|
+
max_f_measure = f_measure
|
41
|
+
best_cutoff = cutoff
|
42
|
+
end
|
43
|
+
end
|
44
|
+
best_cutoffs << [meth, best_cutoff]
|
45
|
+
end
|
46
|
+
return best_cutoffs
|
47
|
+
end
|
48
|
+
|
49
|
+
##########################
|
50
|
+
#OPT-PARSE
|
51
|
+
##########################
|
52
|
+
options = {}
|
53
|
+
OptionParser.new do |opts|
|
54
|
+
opts.banner = "Usage: #{__FILE__} [options]"
|
55
|
+
|
56
|
+
options[:input_file] = nil
|
57
|
+
opts.on("-f", "--input_file PATH", "Input file with precision-recall values") do |input_file|
|
58
|
+
options[:input_file] = input_file
|
59
|
+
end
|
60
|
+
|
61
|
+
end.parse!
|
62
|
+
|
63
|
+
##########################
|
64
|
+
#MAIN
|
65
|
+
##########################
|
66
|
+
|
67
|
+
pr_data = load_pr_data(options[:input_file])
|
68
|
+
best_cutoffs = calculate_youden(pr_data)
|
69
|
+
#puts best_cutoffs.inspect
|
70
|
+
best_cutoffs.each do |cutoffs|
|
71
|
+
puts cutoffs.join("\t")
|
72
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
N_CUTS = 200
|
4
|
+
|
5
|
+
pp_limit = ARGV[1].to_f if !ARGV[1].nil?
|
6
|
+
|
7
|
+
count = 0
|
8
|
+
values = []
|
9
|
+
File.open(ARGV[0]).each do |line|
|
10
|
+
line.chomp!
|
11
|
+
count += 1
|
12
|
+
next if count == 1
|
13
|
+
fields = line.split("\t")
|
14
|
+
values << [fields.first, fields.last.to_f]
|
15
|
+
end
|
16
|
+
values.sort!{|v1, v2| v1.last <=> v2.last}
|
17
|
+
max_score = values.last.last
|
18
|
+
min_score = values.first.last
|
19
|
+
|
20
|
+
interval = (max_score - min_score).fdiv(N_CUTS)
|
21
|
+
cuts = []
|
22
|
+
current = min_score
|
23
|
+
while cuts.length < N_CUTS
|
24
|
+
cuts << current
|
25
|
+
current += interval
|
26
|
+
end
|
27
|
+
|
28
|
+
header = %w[tp tn fp fn cut pre rec]
|
29
|
+
header << 'group' if !ARGV[2].nil?
|
30
|
+
puts header.join("\t")
|
31
|
+
last_pre = 1
|
32
|
+
last_rec = 0
|
33
|
+
change_data = false
|
34
|
+
pre_range = 0
|
35
|
+
rec_range = 0
|
36
|
+
all_weigths = []
|
37
|
+
total_weigth = 0
|
38
|
+
cuts.reverse.each_with_index do |cut, i|
|
39
|
+
tp = 0
|
40
|
+
tn = 0
|
41
|
+
fp = 0
|
42
|
+
fn = 0
|
43
|
+
values.each do |label, score|
|
44
|
+
if score >= cut
|
45
|
+
if label == 'in'
|
46
|
+
tp += 1
|
47
|
+
else
|
48
|
+
fp += 1
|
49
|
+
end
|
50
|
+
else
|
51
|
+
if label == 'out'
|
52
|
+
tn += 1
|
53
|
+
else
|
54
|
+
fn += 1
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
pre = tp.fdiv(tp+fp)
|
59
|
+
rec = tp.fdiv(tp+fn)
|
60
|
+
if !ARGV[1].nil? && pp_limit > 0
|
61
|
+
if !change_data
|
62
|
+
pp = pre/last_pre
|
63
|
+
if pp >= pp_limit
|
64
|
+
change_data = true
|
65
|
+
#pre_range = last_pre/(N_CUTS - i)
|
66
|
+
pre_range = last_pre#/(N_CUTS - i)
|
67
|
+
rec_range = (1 - last_rec)/(N_CUTS - i)
|
68
|
+
(N_CUTS - i).times do |n|
|
69
|
+
all_weigths << (n+1)**8
|
70
|
+
total_weigth += (n+1)**8
|
71
|
+
end
|
72
|
+
else
|
73
|
+
last_pre = pre
|
74
|
+
last_rec = rec
|
75
|
+
end
|
76
|
+
end
|
77
|
+
if change_data
|
78
|
+
tp = tn = fp = fn = 0
|
79
|
+
last_pre -= pre_range * all_weigths.pop.fdiv(total_weigth)
|
80
|
+
last_rec += rec_range
|
81
|
+
pre = last_pre
|
82
|
+
pre = 0 if pre < 0
|
83
|
+
rec = last_rec
|
84
|
+
end
|
85
|
+
end
|
86
|
+
row = [tp, tn, fp, fn, cut, pre, rec]
|
87
|
+
row << ARGV[2] if !ARGV[2].nil?
|
88
|
+
puts row.join("\t")
|
89
|
+
end
|
90
|
+
|
data/bin/get_clusters.R
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#! /usr/bin/env Rscript
|
2
|
+
args <- commandArgs(trailingOnly = TRUE)
|
3
|
+
|
4
|
+
file <- args[1]
|
5
|
+
output <- args[2]
|
6
|
+
|
7
|
+
# matrix_data <- read.table(file, sep="\t", header=TRUE, quote = '')
|
8
|
+
matrix_data <- read.table(file, sep="\t", quote = '')
|
9
|
+
d <- dist(matrix_data, method = "euclidean") # distance matrix
|
10
|
+
fit <- hclust(d, method="ward.D2")
|
11
|
+
fit$height <- round(fit$height, 6)
|
12
|
+
groups <- cutree(fit, h=1.5)
|
13
|
+
write.table(groups, file=file.path(output, 'cluster_asignation'), sep="\t", quote=FALSE, col.names=FALSE)
|
14
|
+
|
15
|
+
pdf(file.path(output, 'figures.pdf'))
|
16
|
+
plot(fit) # display dendogram
|
17
|
+
rect.hclust(fit, h=1.5, border="red") # draw dendogram with red borders around the 5 clusters
|
18
|
+
dev.off()
|
@@ -0,0 +1,197 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# Rojano E. & Seoane P., March 2019
|
3
|
+
# Code to prepare data to get the associations between pathological phenotypes (HPO) and genomic regions (SOR)
|
4
|
+
|
5
|
+
|
6
|
+
ROOT_PATH = File.dirname(__FILE__)
|
7
|
+
$: << File.expand_path(File.join(ROOT_PATH, '..', 'lib', 'gephepred'))
|
8
|
+
|
9
|
+
##############################
|
10
|
+
#LIBRARIES
|
11
|
+
##############################
|
12
|
+
require 'generalMethods.rb'
|
13
|
+
require 'optparse'
|
14
|
+
require "benchmark"
|
15
|
+
|
16
|
+
###############################
|
17
|
+
#METHODS
|
18
|
+
###############################
|
19
|
+
|
20
|
+
def loadPatientFile(patient_file, hpo_storage, hpo_dictionary, add_parents)
|
21
|
+
patient2phenotype = {}
|
22
|
+
hpo_count = {}
|
23
|
+
not_found = []
|
24
|
+
patients_genomic_region_by_chr = {}
|
25
|
+
File.open(patient_file).each do |line|
|
26
|
+
line.chomp!
|
27
|
+
next if line.include?("#")
|
28
|
+
patient, chr, start, stop, phenotype_profile = line.split("\t", 5)
|
29
|
+
next if phenotype_profile.nil? #For skipping patients without phenotypes
|
30
|
+
phenotypes = phenotype_profile.split('|')
|
31
|
+
phenotypes.each do |hpo_name|
|
32
|
+
hpo_code = hpo_dictionary[hpo_name]
|
33
|
+
if hpo_code.nil?
|
34
|
+
not_found << hpo_name if !not_found.include?(hpo_name)
|
35
|
+
else
|
36
|
+
get_all_hpos(patient, hpo_code, patient2phenotype, hpo_storage, hpo_count, add_parents)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
info = [patient, start.to_i, stop.to_i]
|
40
|
+
add_record(patients_genomic_region_by_chr, chr, info)
|
41
|
+
end
|
42
|
+
if add_parents == 'coh'
|
43
|
+
general_parents_in_cohort = get_parents_in_patients(patient2phenotype, hpo_storage)
|
44
|
+
parent_patient2phenotype = {} # For new parent hpo added to patients.
|
45
|
+
end
|
46
|
+
return patient2phenotype, hpo_count, not_found, patients_genomic_region_by_chr
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_parents_in_patients(patient2phenotype, hpo_storage)
|
50
|
+
all_hpo_codes = []
|
51
|
+
patient2phenotype.each do |patient, hpo_codes|
|
52
|
+
all_hpo_codes = all_hpo_codes | hpo_codes
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_all_hpos(patient, hpo_code, patient2phenotype, hpo_storage, hpo_count, add_parents)
|
57
|
+
add_record(hpo_count, hpo_code, patient)
|
58
|
+
add_record(patient2phenotype, patient, hpo_code)
|
59
|
+
if add_parents == 'root'
|
60
|
+
hpo_parent_codes = hpo_storage[hpo_code][2]
|
61
|
+
hpo_parent_codes.each do |parent_code|
|
62
|
+
get_all_hpos(patient, parent_code, patient2phenotype, hpo_storage, hpo_count, add_parents)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def build_tripartite_network(patients2hpo, hpo_stats, ic_threshold, patients_by_cluster)
|
68
|
+
tripartite_network = []
|
69
|
+
patients_by_cluster.each do |patient, node_ids|
|
70
|
+
node_ids.each do |node_id|
|
71
|
+
tripartite_network << [node_id, patient]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
patients_list = patients_by_cluster.keys
|
75
|
+
patients2hpo.each do |patient, code|
|
76
|
+
if patients_list.include?(patient)
|
77
|
+
code.each do |c|
|
78
|
+
tripartite_network << [c, patient] if hpo_stats[c].last >= ic_threshold
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
return tripartite_network
|
83
|
+
end
|
84
|
+
|
85
|
+
def compute_hpo_stats(hpo_count, patient_number)
|
86
|
+
hpo_stats = {}
|
87
|
+
patient_hpo_ic = []
|
88
|
+
hpo_count.each do |hpo_code, patient_ids|
|
89
|
+
hpo_freq = patient_ids.length.fdiv(patient_number) #hpo frequency in patients
|
90
|
+
hpo_ic = -Math.log10(hpo_freq)
|
91
|
+
hpo_stats[hpo_code] = [hpo_freq, hpo_ic]
|
92
|
+
patient_ids.each do |patient_id|
|
93
|
+
patient_hpo_ic << [patient_id, hpo_code, hpo_ic]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
return hpo_stats, patient_hpo_ic.sort{|a,b| a.first.to_i <=> b.first.to_i}
|
97
|
+
end
|
98
|
+
|
99
|
+
def write_hash(hash, file_path, header = [])
|
100
|
+
File.open(file_path, 'w') do |handler|
|
101
|
+
handler.puts header.join("\t") if !header.empty?
|
102
|
+
hash.each do |key, array|
|
103
|
+
handler.puts "#{key}\t#{array.join("\t")}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def write_array(array, file_path)
|
109
|
+
File.open(file_path, 'w') do |handler|
|
110
|
+
array.each do |record|
|
111
|
+
if record.class == String
|
112
|
+
line = record
|
113
|
+
else
|
114
|
+
line = record.join("\t")
|
115
|
+
end
|
116
|
+
handler.puts line
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
##############################
|
122
|
+
#OPTPARSE
|
123
|
+
##############################
|
124
|
+
|
125
|
+
options = {}
|
126
|
+
OptionParser.new do |opts|
|
127
|
+
opts.banner = "Usage: #{__FILE__} [options]"
|
128
|
+
|
129
|
+
options[:cluster_file] = 'cluster_coords.txt'
|
130
|
+
opts.on("-c", "--cluster_file PATH", "Cluster coords output file that will be used to translate SOR nodes") do |value|
|
131
|
+
options[:cluster_file] = value
|
132
|
+
end
|
133
|
+
|
134
|
+
options[:excluded_hpo] = nil
|
135
|
+
opts.on("-e", "--excluded_hpo PATH", "List of HPO phenotypes to exclude (low informative)") do |excluded_hpo|
|
136
|
+
options[:excluded_hpo] = excluded_hpo
|
137
|
+
end
|
138
|
+
|
139
|
+
options[:patient_file] = nil
|
140
|
+
opts.on("-i", "--input_file PATH", "Input file with patients for parsing phenotypes to HPO codes") do |value|
|
141
|
+
options[:patient_file] = value
|
142
|
+
end
|
143
|
+
|
144
|
+
options[:mutation_type] = 'A'
|
145
|
+
opts.on("-m", "--mutation_type STRING", "Type of patient mutation, either it is a deletion (d) or duplication (D)") do |type|
|
146
|
+
options[:mutation_type] = type
|
147
|
+
end
|
148
|
+
|
149
|
+
options[:output_file] = 'tripartite_network.txt'
|
150
|
+
opts.on("-o", "--output_file PATH", "Output file for the tripartite network") do |value|
|
151
|
+
options[:output_file] = value
|
152
|
+
end
|
153
|
+
|
154
|
+
options[:hpo_file] = nil
|
155
|
+
opts.on("-p", "--hpo_file PATH", "Input HPO file for extracting HPO codes") do |value|
|
156
|
+
options[:hpo_file] = value
|
157
|
+
end
|
158
|
+
|
159
|
+
options[:add_parents] = nil
|
160
|
+
opts.on("-r", "--parents STRING", "'root' to add all parents until the ontology root. 'coh' to add parents until the most general term in the cohort.") do |value|
|
161
|
+
options[:add_parents] = value
|
162
|
+
end
|
163
|
+
|
164
|
+
options[:hpo_stat_file] = 'hpo_stats.txt'
|
165
|
+
opts.on("-s", "--hpo_stat_file PATH", "Output file with HPO codes, their frequency and CI") do |value|
|
166
|
+
options[:hpo_stat_file] = value
|
167
|
+
end
|
168
|
+
|
169
|
+
options[:thresold] = 0
|
170
|
+
opts.on("-t", "--info_thresold FLOAT", "IC thresold to discard non informative hpo. Default: 0.") do |thresold|
|
171
|
+
options[:thresold] = thresold.to_f
|
172
|
+
end
|
173
|
+
|
174
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
175
|
+
puts opts
|
176
|
+
exit
|
177
|
+
end
|
178
|
+
|
179
|
+
end.parse!
|
180
|
+
|
181
|
+
###############################
|
182
|
+
#MAIN
|
183
|
+
###############################
|
184
|
+
hpo_black_list = load_hpo_black_list(options[:excluded_hpo])
|
185
|
+
hpo_storage = load_hpo_file(options[:hpo_file], hpo_black_list)
|
186
|
+
hpo_dictionary = create_hpo_dictionary(hpo_storage)
|
187
|
+
patients2hpo, hpo_count, not_found, chr_patients_genomic_region = loadPatientFile(options[:patient_file], hpo_storage, hpo_dictionary, options[:add_parents])
|
188
|
+
hpo_stats, patient_hpo_ic = compute_hpo_stats(hpo_count, patients2hpo.length)
|
189
|
+
patients_by_cluster, sors = generate_cluster_regions(chr_patients_genomic_region, options[:mutation_type])
|
190
|
+
tripartite_network = build_tripartite_network(patients2hpo, hpo_stats, options[:thresold], patients_by_cluster)
|
191
|
+
|
192
|
+
write_array(not_found - hpo_black_list, 'missing_hpo_names')
|
193
|
+
write_array(sors, options[:cluster_file])
|
194
|
+
write_hash(hpo_stats.select{|hp_code, stats| stats.last > options[:thresold]}, options[:hpo_stat_file], %w[HPOcode Frequency IC])
|
195
|
+
write_array(tripartite_network, options[:output_file])
|
196
|
+
write_array(patient_hpo_ic, 'filtered_hpo.txt')
|
197
|
+
|
data/bin/lines.R
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
#! /usr/bin/env Rscript
|
2
|
+
|
3
|
+
library(ggplot2)
|
4
|
+
library(optparse)
|
5
|
+
|
6
|
+
#####################
|
7
|
+
## OPTPARSE
|
8
|
+
#####################
|
9
|
+
option_list <- list(
|
10
|
+
make_option(c("-d", "--data_file"), type="character",
|
11
|
+
help="Tabulated file with information about each sample"),
|
12
|
+
make_option(c("-o", "--output"), type="character", default="results",
|
13
|
+
help="Output figure file"),
|
14
|
+
make_option(c("-x", "--x_column"), type="character",
|
15
|
+
help="Name of column to be used for X dimension"),
|
16
|
+
make_option(c("-y", "--y_column"), type="character",
|
17
|
+
help="Name of column to be used for Y dimension"),
|
18
|
+
make_option(c("-s", "--set_column"), type="character", default="",
|
19
|
+
help="Name of column to be used on set groups"),
|
20
|
+
make_option(c("-L", "--no_legend"), action="store_true", default=FALSE,
|
21
|
+
help="Remove legend"),
|
22
|
+
make_option(c("-l", "--legend_title"), type="character", default="Association methods",
|
23
|
+
help="Title for legend"),
|
24
|
+
make_option(c("-c", "--colours"), type="character", default="",
|
25
|
+
help="Define which color is asigned to each data series. List colours comma separated."),
|
26
|
+
make_option(c("-m", "--set_geom"), type="character", default="line",
|
27
|
+
help="Choose the type of graphical representation, using points or lines"),
|
28
|
+
make_option(c("-e", "--establish_limits"), action="store_true", default=FALSE,
|
29
|
+
help="Allow establishing limits for X and Y axis. If true, please set x_limit and y_limit"),
|
30
|
+
make_option(c("-X", "--x_limit"), type="integer", default=0,
|
31
|
+
help="Set x axis limit"),
|
32
|
+
make_option(c("-Y", "--y_limit"), type="integer", default=1,
|
33
|
+
help="Set y axis limit")
|
34
|
+
|
35
|
+
)
|
36
|
+
opt <- parse_args(OptionParser(option_list=option_list))
|
37
|
+
|
38
|
+
|
39
|
+
################################################################
|
40
|
+
## MAIN
|
41
|
+
################################################################
|
42
|
+
|
43
|
+
data <- read.table(opt$data_file, sep="\t", header=TRUE)
|
44
|
+
|
45
|
+
pdf(paste(opt$output, '.pdf', sep=""))
|
46
|
+
if(opt$set_column != ""){
|
47
|
+
obj <- ggplot(data, aes(x=data[[opt$x_column]], y=data[[opt$y_column]], color=data[[opt$set_column]]))
|
48
|
+
}else{
|
49
|
+
obj <- ggplot(data, aes(x=data[[opt$x_column]], y=data[[opt$y_column]]))
|
50
|
+
}
|
51
|
+
if(opt$colours != ""){
|
52
|
+
colours <- unlist(strsplit(opt$colours, ','))
|
53
|
+
obj <- obj + scale_color_manual(values=c(colours))
|
54
|
+
}
|
55
|
+
|
56
|
+
if(opt$set_geom == 'point'){
|
57
|
+
obj <- obj + geom_point()
|
58
|
+
}else if(opt$set_geom == 'line'){
|
59
|
+
obj <- obj + geom_line()
|
60
|
+
}
|
61
|
+
|
62
|
+
obj <- obj + xlim(0, 1)
|
63
|
+
obj <- obj + ylim(0, 1)
|
64
|
+
|
65
|
+
if (opt$establish_limits){
|
66
|
+
obj <- obj + xlim(opt$x_limit, 1)
|
67
|
+
obj <- obj + ylim(0, opt$y_limit)
|
68
|
+
}
|
69
|
+
obj <- obj + xlab(opt$x_column)
|
70
|
+
obj <- obj + ylab(opt$y_column)
|
71
|
+
obj <- obj + labs(fill = opt$legend_title)
|
72
|
+
if(opt$no_legend){
|
73
|
+
obj <- obj + guides(color=FALSE)
|
74
|
+
}
|
75
|
+
obj
|
76
|
+
dev.off()
|
77
|
+
|