From 6b367e3e2ee144aae5b79c50234faf0ea49adba6 Mon Sep 17 00:00:00 2001 From: Zachary Sloan Date: Thu, 23 Jan 2014 21:52:03 +0000 Subject: Histogram is working Fixed some bug with generating the manhattan plot for the HLC data set --- wqflask/base/data_set.py | 2 + .../wqflask/marker_regression/marker_regression.py | 11 +- wqflask/wqflask/my_pylmm/data/genofile_parser.py | 6 +- wqflask/wqflask/my_pylmm/pyLMM/lmm.py | 2 +- .../wqflask/static/new/javascript/histogram.coffee | 96 ++++----------- wqflask/wqflask/static/new/javascript/histogram.js | 72 ++++------- .../static/new/javascript/marker_regression.coffee | 42 +++++-- .../static/new/javascript/marker_regression.js | 30 +++-- .../static/new/javascript/show_trait.coffee | 3 +- .../wqflask/static/new/javascript/show_trait.js | 1 - wqflask/wqflask/templates/marker_regression.html | 3 +- wqflask/wqflask/templates/show_trait.html | 41 +++++++ .../wqflask/templates/show_trait_edit_data.html | 132 ++++++++++----------- wqflask/wqflask/views.py | 7 +- 14 files changed, 226 insertions(+), 222 deletions(-) (limited to 'wqflask') diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py index d421f21e..0d295bed 100755 --- a/wqflask/base/data_set.py +++ b/wqflask/base/data_set.py @@ -185,6 +185,7 @@ class HumanMarkers(Markers): self.markers = [] for line in marker_data_fh: splat = line.strip().split() + print("splat:", splat) marker = {} marker['chr'] = int(splat[0]) marker['name'] = splat[1] @@ -204,6 +205,7 @@ class HumanMarkers(Markers): # #Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values # marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61 + print("p_values2:", p_values) super(HumanMarkers, self).add_pvalues(p_values) with Bench("deleting markers"): diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py index 006c586b..fa9e0b67 100755 --- a/wqflask/wqflask/marker_regression/marker_regression.py +++ b/wqflask/wqflask/marker_regression/marker_regression.py @@ -48,7 +48,7 @@ class MarkerRegression(object): self.samples.append(str(sample)) self.vals.append(value) - self.gen_data(tempdata) + self.qtl_results = self.gen_data(tempdata) #Get chromosome lengths for drawing the manhattan plot chromosome_mb_lengths = {} @@ -78,9 +78,9 @@ class MarkerRegression(object): genotype_matrix = np.array(trimmed_genotype_data).T - print("pheno_vector: ", pf(pheno_vector)) - print("genotype_matrix: ", pf(genotype_matrix)) - print("genotype_matrix.shape: ", pf(genotype_matrix.shape)) + #print("pheno_vector: ", pf(pheno_vector)) + #print("genotype_matrix: ", pf(genotype_matrix)) + #print("genotype_matrix.shape: ", pf(genotype_matrix.shape)) t_stats, p_values = lmm.run( pheno_vector, @@ -89,9 +89,10 @@ class MarkerRegression(object): refit=False, temp_data=tempdata ) + #print("p_values:", p_values) self.dataset.group.markers.add_pvalues(p_values) - self.qtl_results = self.dataset.group.markers.markers + return self.dataset.group.markers.markers def gen_human_results(self, pheno_vector, tempdata): diff --git a/wqflask/wqflask/my_pylmm/data/genofile_parser.py b/wqflask/wqflask/my_pylmm/data/genofile_parser.py index c8c0929f..4ebadb6e 100644 --- a/wqflask/wqflask/my_pylmm/data/genofile_parser.py +++ b/wqflask/wqflask/my_pylmm/data/genofile_parser.py @@ -106,7 +106,7 @@ class ConvertGenoFile(object): this_marker.genotypes.append("NA") #print("this_marker is:", pf(this_marker.__dict__)) - if this_marker.chr == "5": + if this_marker.chr == "14": self.markers.append(this_marker.__dict__) with open(self.output_file, 'w') as fh: @@ -125,8 +125,8 @@ class ConvertGenoFile(object): def process_rows(self): for self.latest_row_pos, row in enumerate(self.input_fh): - if self.input_file.endswith(".geno.gz"): - print("row: ", row) + #if self.input_file.endswith(".geno.gz"): + # print("row: ", row) self.latest_row_value = row # Take care of headers if not row.strip(): diff --git a/wqflask/wqflask/my_pylmm/pyLMM/lmm.py b/wqflask/wqflask/my_pylmm/pyLMM/lmm.py index 60d36b8d..6d12991f 100644 --- a/wqflask/wqflask/my_pylmm/pyLMM/lmm.py +++ b/wqflask/wqflask/my_pylmm/pyLMM/lmm.py @@ -136,7 +136,7 @@ def run_human(pheno_vector, #print("***** Added to {} queue *****".format(key)) for snp, this_id in plink_input: #with Bench("part before association"): - #if count > 2000: + #if count > 1000: # break count += 1 diff --git a/wqflask/wqflask/static/new/javascript/histogram.coffee b/wqflask/wqflask/static/new/javascript/histogram.coffee index 03332835..f1799307 100644 --- a/wqflask/wqflask/static/new/javascript/histogram.coffee +++ b/wqflask/wqflask/static/new/javascript/histogram.coffee @@ -4,10 +4,7 @@ class Histogram constructor: (@sample_list, @sample_group) -> @sort_by = "name" @format_count = d3.format(",.0f") #a formatter for counts - @get_samples() - #if @sample_attr_vals.length > 0 - # @get_distinct_attr_vals() - # @get_attr_color_dict(@distinct_attr_vals) + @get_sample_vals() @margin = {top: 10, right: 30, bottom: 30, left: 30} @plot_width = 960 - @margin.left - @margin.right @@ -28,21 +25,9 @@ class Histogram @create_graph() - get_samples: () -> - @sample_names = (sample.name for sample in @sample_list when sample.value != null) + get_sample_vals: () -> @sample_vals = (sample.value for sample in @sample_list when sample.value != null) - @attributes = (key for key of @sample_list[0]["extra_attributes"]) - console.log("attributes:", @attributes) - @sample_attr_vals = [] - if @attributes.length > 0 - for sample in @sample_list - attr_vals = {} - for attribute in @attributes - attr_vals[attribute] = sample["extra_attributes"][attribute] - @sample_attr_vals.push(attr_vals) - @samples = _.zip(@sample_names, @sample_vals, @sample_attr_vals) - create_svg: () -> svg = d3.select("#histogram") .append("svg") @@ -51,18 +36,19 @@ class Histogram .attr("height", @plot_height + @margin.top + @margin.bottom) .append("g") .attr("transform", "translate(" + @margin.left + "," + @margin.top + ")") - + return svg - + create_x_scale: () -> + console.log("min/max:", d3.min(@sample_vals) + "," + d3.max(@sample_vals)) @x_scale = d3.scale.linear() .domain([d3.min(@sample_vals), d3.max(@sample_vals)]) - .range([0, @plot_width]) + .range([0, @plot_width]) get_histogram_data: () -> console.log("sample_vals:", @sample_vals) @histogram_data = d3.layout.histogram() - .bins(@x_scale.ticks(10))(@sample_vals) + .bins(@x_scale.ticks(20))(@sample_vals) console.log("histogram_data:", @histogram_data[0]) create_y_scale: () -> @@ -71,12 +57,9 @@ class Histogram .range([@plot_height, 0]) create_graph: () -> - @add_x_axis() - #@add_y_axis() - @add_bars() - + add_x_axis: () -> x_axis = d3.svg.axis() .scale(@x_scale) @@ -86,64 +69,37 @@ class Histogram .attr("class", "x axis") .attr("transform", "translate(0," + @plot_height + ")") .call(x_axis) - #.selectAll("text") - # .style("text-anchor", "end") - # .style("font-size", "12px") - # .attr("dx", "-.8em") - # .attr("dy", "-.3em") - # .attr("transform", (d) => - # return "rotate(-90)" - # ) - - #add_y_axis: () -> - # y_axis = d3.svg.axis() - # .scale(@y_scale) - # .orient("left") - # .ticks(5) - # - # @svg.append("g") - # .attr("class", "y axis") - # .call(y_axis) - # .append("text") - # .attr("transform", "rotate(-90)") - # .attr("y", 6) - # .attr("dy", ".71em") - # .style("text-anchor", "end") - + + add_y_axis: () -> + y_axis = d3.svg.axis() + .scale(@y_scale) + .orient("left") + .ticks(5) add_bars: () -> - @svg.selectAll(".bar") + console.log("bar_width:", @x_scale(@histogram_data[0].dx)) + bar = @svg.selectAll(".bar") .data(@histogram_data) .enter().append("g") .attr("class", "bar") .attr("transform", (d) => - return "translate(" + @margin.left + "," + @margin.top + ")") - .append("rect") + return "translate(" + @x_scale(d.x) + "," + @y_scale(d.y) + ")") + + bar.append("rect") .attr("x", 1) - .attr("width", @x_scale(@histogram_data[0].dx) - 1) + .attr("width", (@x_scale(@histogram_data[1].x) - @x_scale(@histogram_data[0].x)) - 1) .attr("height", (d) => return @plot_height - @y_scale(d.y) ) - .append("text") + bar.append("text") .attr("dy", ".75em") .attr("y", 6) - .attr("x", @x_scale(@histogram_data[0].dx) / 2) + .attr("x", (@x_scale(@histogram_data[1].x) - @x_scale(@histogram_data[0].x))/2) .attr("text-anchor", "middle") + .style("fill", "#fff") .text((d) => - return @format_count(d.y) + bar_height = @plot_height - @y_scale(d.y) + if bar_height > 20 + return @format_count(d.y) ) - #open_trait_selection: () -> - # $('#collections_holder').load('/collections/list?color_by_trait #collections_list', => - # $.colorbox( - # inline: true - # href: "#collections_holder" - # ) - # #Removes the links from the collection names, because clicking them would leave the page - # #instead of loading the list of traits in the colorbox - # $('a.collection_name').attr( 'onClick', 'return false' ) - # #$('.collection_name').each (index, element) => - # # console.log("contents:", $(element).contents()) - # # $(element).contents().unwrap() - # ) - root.Histogram = Histogram \ No newline at end of file diff --git a/wqflask/wqflask/static/new/javascript/histogram.js b/wqflask/wqflask/static/new/javascript/histogram.js index e7926ab1..eb00ca73 100644 --- a/wqflask/wqflask/static/new/javascript/histogram.js +++ b/wqflask/wqflask/static/new/javascript/histogram.js @@ -11,7 +11,7 @@ this.sample_group = sample_group; this.sort_by = "name"; this.format_count = d3.format(",.0f"); - this.get_samples(); + this.get_sample_vals(); this.margin = { top: 10, right: 30, @@ -32,21 +32,9 @@ this.create_graph(); } - Histogram.prototype.get_samples = function() { - var attr_vals, attribute, key, sample, _i, _j, _len, _len1, _ref, _ref1; - this.sample_names = (function() { - var _i, _len, _ref, _results; - _ref = this.sample_list; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - sample = _ref[_i]; - if (sample.value !== null) { - _results.push(sample.name); - } - } - return _results; - }).call(this); - this.sample_vals = (function() { + Histogram.prototype.get_sample_vals = function() { + var sample; + return this.sample_vals = (function() { var _i, _len, _ref, _results; _ref = this.sample_list; _results = []; @@ -58,30 +46,6 @@ } return _results; }).call(this); - this.attributes = (function() { - var _results; - _results = []; - for (key in this.sample_list[0]["extra_attributes"]) { - _results.push(key); - } - return _results; - }).call(this); - console.log("attributes:", this.attributes); - this.sample_attr_vals = []; - if (this.attributes.length > 0) { - _ref = this.sample_list; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - sample = _ref[_i]; - attr_vals = {}; - _ref1 = this.attributes; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - attribute = _ref1[_j]; - attr_vals[attribute] = sample["extra_attributes"][attribute]; - } - this.sample_attr_vals.push(attr_vals); - } - } - return this.samples = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals); }; Histogram.prototype.create_svg = function() { @@ -91,12 +55,13 @@ }; Histogram.prototype.create_x_scale = function() { + console.log("min/max:", d3.min(this.sample_vals) + "," + d3.max(this.sample_vals)); return this.x_scale = d3.scale.linear().domain([d3.min(this.sample_vals), d3.max(this.sample_vals)]).range([0, this.plot_width]); }; Histogram.prototype.get_histogram_data = function() { console.log("sample_vals:", this.sample_vals); - this.histogram_data = d3.layout.histogram().bins(this.x_scale.ticks(10))(this.sample_vals); + this.histogram_data = d3.layout.histogram().bins(this.x_scale.ticks(20))(this.sample_vals); return console.log("histogram_data:", this.histogram_data[0]); }; @@ -120,14 +85,27 @@ return this.svg.append("g").attr("class", "x axis").attr("transform", "translate(0," + this.plot_height + ")").call(x_axis); }; + Histogram.prototype.add_y_axis = function() { + var y_axis; + return y_axis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5); + }; + Histogram.prototype.add_bars = function() { - var _this = this; - return this.svg.selectAll(".bar").data(this.histogram_data).enter().append("g").attr("class", "bar").attr("transform", function(d) { - return "translate(" + _this.margin.left + "," + _this.margin.top + ")"; - }).append("rect").attr("x", 1).attr("width", this.x_scale(this.histogram_data[0].dx) - 1).attr("height", function(d) { + var bar, + _this = this; + console.log("bar_width:", this.x_scale(this.histogram_data[0].dx)); + bar = this.svg.selectAll(".bar").data(this.histogram_data).enter().append("g").attr("class", "bar").attr("transform", function(d) { + return "translate(" + _this.x_scale(d.x) + "," + _this.y_scale(d.y) + ")"; + }); + bar.append("rect").attr("x", 1).attr("width", (this.x_scale(this.histogram_data[1].x) - this.x_scale(this.histogram_data[0].x)) - 1).attr("height", function(d) { return _this.plot_height - _this.y_scale(d.y); - }).append("text").attr("dy", ".75em").attr("y", 6).attr("x", this.x_scale(this.histogram_data[0].dx) / 2).attr("text-anchor", "middle").text(function(d) { - return _this.format_count(d.y); + }); + return bar.append("text").attr("dy", ".75em").attr("y", 6).attr("x", (this.x_scale(this.histogram_data[1].x) - this.x_scale(this.histogram_data[0].x)) / 2).attr("text-anchor", "middle").style("fill", "#fff").text(function(d) { + var bar_height; + bar_height = _this.plot_height - _this.y_scale(d.y); + if (bar_height > 20) { + return _this.format_count(d.y); + } }); }; diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.coffee b/wqflask/wqflask/static/new/javascript/marker_regression.coffee index f5f13c27..93d3b5de 100644 --- a/wqflask/wqflask/static/new/javascript/marker_regression.coffee +++ b/wqflask/wqflask/static/new/javascript/marker_regression.coffee @@ -14,7 +14,7 @@ $ -> @marker_names = [] console.time('Create coordinates') @create_coordinates() - console.log("@x_coords: ", @x_coords) + #console.log("@x_coords: ", @x_coords) console.log("@y_coords: ", @y_coords) console.timeEnd('Create coordinates') [@chr_lengths, @cumulative_chr_lengths] = @get_chr_lengths() @@ -30,7 +30,10 @@ $ -> @y_max = d3.max(@y_coords) * 1.2 @svg = @create_svg() + console.log("svg created") @plot_coordinates = _.zip(@x_coords, @y_coords, @marker_names) + #console.log("coordinates:", @plot_coordinates) + @plot_height -= @y_buffer @create_scales() @@ -73,6 +76,7 @@ $ -> create_coordinates: () -> chr_lengths = [] chr_seen = [] + #console.log("total_length2:", @total_length) for result in js_data.qtl_results if result.chr == "X" chr_length = parseFloat(@chromosomes[20]) @@ -80,12 +84,16 @@ $ -> chr_length = parseFloat(@chromosomes[result.chr]) if not(result.chr in chr_seen) chr_seen.push(result.chr) - chr_lengths.push(chr_length) - if result.chr != "1" + chr_lengths.push(chr_length) + #console.log("result.chr:", result.chr) + if result.chr != 1 @total_length += parseFloat(chr_lengths[chr_lengths.length - 2]) - @x_coords.push(@total_length + parseFloat(result.Mb)) - @y_coords.push(result.lod_score) - @marker_names.push(result.name) + #console.log("total_length3:", @total_length) + #console.log("Mb:", result.Mb) + if result.lod_score > 2 + @x_coords.push(@total_length + parseFloat(result.Mb)) + @y_coords.push(result.lod_score) + @marker_names.push(result.name) @total_length += parseFloat(chr_lengths[chr_lengths.length-1]) #console.log("chr_lengths: ", chr_lengths) @@ -141,12 +149,19 @@ $ -> .style("stroke", "#000") create_scales: () -> + #@x_scale = d3.scale.linear() + # .domain([0, d3.max(@x_coords)]) + # .range([@x_buffer, @plot_width]) + console.log("@chromosomes[24]:", @chromosomes['24']) + console.log("@chromosomes[23]:", @chromosomes['23']) + console.log("@total_length:", @total_length) + console.log("d3.max(@xcoords):", d3.max(@x_coords)) @x_scale = d3.scale.linear() - .domain([0, d3.max(@x_coords)]) + .domain([0, (@total_length + @chromosomes['24'])]) .range([@x_buffer, @plot_width]) @y_scale = d3.scale.linear() - .domain([0, @y_max]) + .domain([2, @y_max]) .range([@plot_height, @y_buffer]) create_x_axis_tick_values: () -> @@ -230,13 +245,13 @@ $ -> .style("stroke", "#ccc") fill_chr_areas: () -> - @svg.selectAll("rect.chr_fill_area_1") + @svg.selectAll("rect.chr_fill_area") .data(_.zip(@chr_lengths, @cumulative_chr_lengths), (d) => return d ) .enter() .append("rect") - .attr("class", "chr_fill_area_1") + .attr("class", "chr_fill_area") .attr("x", (d, i) => if i == 0 return @x_scale(0) @@ -247,7 +262,8 @@ $ -> .attr("width", (d) => return @x_scale(d[0]) ) - .attr("height", @plot_height-@y_buffer) + .attr("height", @plot_height-@y_buffer) + .attr("fill", "none") add_chr_labels: () -> chr_names = [] @@ -279,10 +295,10 @@ $ -> .enter() .append("circle") .attr("cx", (d) => - return parseFloat(@x_buffer) + ((parseFloat(@plot_width)-parseFloat(@x_buffer)) * d[0]/parseFloat(@x_max)) + return @x_scale(d[0]) ) .attr("cy", (d) => - return @plot_height - ((@plot_height-@y_buffer) * d[1]/@y_max) + return @y_scale(d[1]) ) .attr("r", 2) .attr("id", (d) => diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.js b/wqflask/wqflask/static/new/javascript/marker_regression.js index cdf37671..8e5b6c11 100644 --- a/wqflask/wqflask/static/new/javascript/marker_regression.js +++ b/wqflask/wqflask/static/new/javascript/marker_regression.js @@ -20,7 +20,6 @@ this.marker_names = []; console.time('Create coordinates'); this.create_coordinates(); - console.log("@x_coords: ", this.x_coords); console.log("@y_coords: ", this.y_coords); console.timeEnd('Create coordinates'); _ref = this.get_chr_lengths(), this.chr_lengths = _ref[0], this.cumulative_chr_lengths = _ref[1]; @@ -31,6 +30,7 @@ console.log("@x_buffer: ", this.x_buffer); this.y_max = d3.max(this.y_coords) * 1.2; this.svg = this.create_svg(); + console.log("svg created"); this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names); this.plot_height -= this.y_buffer; this.create_scales(); @@ -93,13 +93,15 @@ if (!(_ref1 = result.chr, __indexOf.call(chr_seen, _ref1) >= 0)) { chr_seen.push(result.chr); chr_lengths.push(chr_length); - if (result.chr !== "1") { + if (result.chr !== 1) { this.total_length += parseFloat(chr_lengths[chr_lengths.length - 2]); } } - this.x_coords.push(this.total_length + parseFloat(result.Mb)); - this.y_coords.push(result.lod_score); - this.marker_names.push(result.name); + if (result.lod_score > 2) { + this.x_coords.push(this.total_length + parseFloat(result.Mb)); + this.y_coords.push(result.lod_score); + this.marker_names.push(result.name); + } } return this.total_length += parseFloat(chr_lengths[chr_lengths.length - 1]); }; @@ -150,8 +152,12 @@ }; Manhattan_Plot.prototype.create_scales = function() { - this.x_scale = d3.scale.linear().domain([0, d3.max(this.x_coords)]).range([this.x_buffer, this.plot_width]); - return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]); + console.log("@chromosomes[24]:", this.chromosomes['24']); + console.log("@chromosomes[23]:", this.chromosomes['23']); + console.log("@total_length:", this.total_length); + console.log("d3.max(@xcoords):", d3.max(this.x_coords)); + this.x_scale = d3.scale.linear().domain([0, this.total_length + this.chromosomes['24']]).range([this.x_buffer, this.plot_width]); + return this.y_scale = d3.scale.linear().domain([2, this.y_max]).range([this.plot_height, this.y_buffer]); }; Manhattan_Plot.prototype.create_x_axis_tick_values = function() { @@ -224,9 +230,9 @@ Manhattan_Plot.prototype.fill_chr_areas = function() { var _this = this; - return this.svg.selectAll("rect.chr_fill_area_1").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), function(d) { + return this.svg.selectAll("rect.chr_fill_area").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), function(d) { return d; - }).enter().append("rect").attr("class", "chr_fill_area_1").attr("x", function(d, i) { + }).enter().append("rect").attr("class", "chr_fill_area").attr("x", function(d, i) { if (i === 0) { return _this.x_scale(0); } else { @@ -234,7 +240,7 @@ } }).attr("y", this.y_buffer).attr("width", function(d) { return _this.x_scale(d[0]); - }).attr("height", this.plot_height - this.y_buffer); + }).attr("height", this.plot_height - this.y_buffer).attr("fill", "none"); }; Manhattan_Plot.prototype.add_chr_labels = function() { @@ -257,9 +263,9 @@ Manhattan_Plot.prototype.add_plot_points = function() { var _this = this; return this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", function(d) { - return parseFloat(_this.x_buffer) + ((parseFloat(_this.plot_width) - parseFloat(_this.x_buffer)) * d[0] / parseFloat(_this.x_max)); + return _this.x_scale(d[0]); }).attr("cy", function(d) { - return _this.plot_height - ((_this.plot_height - _this.y_buffer) * d[1] / _this.y_max); + return _this.y_scale(d[1]); }).attr("r", 2).attr("id", function(d) { return "point_" + String(d[2]); }).classed("circle", true).on("mouseover", function(d) { diff --git a/wqflask/wqflask/static/new/javascript/show_trait.coffee b/wqflask/wqflask/static/new/javascript/show_trait.coffee index e42a7d82..e45bb0be 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait.coffee +++ b/wqflask/wqflask/static/new/javascript/show_trait.coffee @@ -64,7 +64,8 @@ $ -> sample_lists = js_data.sample_lists sample_group_types = js_data.sample_group_types - $("#update_bar_chart.btn-group").button() + #if $("#update_bar_chart").length + # $("#update_bar_chart.btn-group").button() root.bar_chart = new Bar_Chart(sample_lists[0]) root.histogram = new Histogram(sample_lists[0]) new Box_Plot(sample_lists[0]) diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js index d3a34166..c28b05f5 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait.js +++ b/wqflask/wqflask/static/new/javascript/show_trait.js @@ -61,7 +61,6 @@ var block_by_attribute_value, block_by_index, block_outliers, change_stats_value, create_value_dropdown, edit_data_change, export_sample_table_data, get_sample_table_data, hide_no_value, hide_tabs, make_table, on_corr_method_change, populate_sample_attributes_values_dropdown, process_id, reset_samples_table, sample_group_types, sample_lists, show_hide_outliers, stats_mdp_change, update_stat_values; sample_lists = js_data.sample_lists; sample_group_types = js_data.sample_group_types; - $("#update_bar_chart.btn-group").button(); root.bar_chart = new Bar_Chart(sample_lists[0]); root.histogram = new Histogram(sample_lists[0]); new Box_Plot(sample_lists[0]); diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html index 64d2e9b7..c1d4d7e5 100644 --- a/wqflask/wqflask/templates/marker_regression.html +++ b/wqflask/wqflask/templates/marker_regression.html @@ -26,6 +26,7 @@ Genome Association Results +
Index | - -Sample | - -Value | - {% if sample_type.se_exists() %} -- - | SE | - {% endif %} - - {% for attribute in sample_type.attributes|sort() %} -- {{ sample_type.attributes[attribute].name }} - | + +||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Index | +Sample | +Value | + {% if sample_type.se_exists() %} ++ | SE | + {% endif %} + {% for attribute in sample_type.attributes|sort() %} ++ {{ sample_type.attributes[attribute].name }} + | + {% endfor %} +||||||
+ {{ loop.index }} + + | + ++ + {{ sample.name }} + + | + + {# Todo: Add IDs #} ++ + | + + {% if sample_type.se_exists() %} ++ ± + | + + {# Todo: Add IDs #} ++ + | + {% endif %} + + {# Loop through each attribute type and input value #} + {% for attribute in sample_type.attributes|sort() %} ++ {{ sample.extra_attributes[sample_type.attributes[attribute].name] }} + | + {% endfor %} +||||||
- {{ loop.index }} - - | - -- - {{ sample.name }} - - | - - {# Todo: Add IDs #} -- - | - - {% if sample_type.se_exists() %} -- ± - | - - {# Todo: Add IDs #} -- - | - {% endif %} - - {# Loop through each attribute type and input value #} - {% for attribute in sample_type.attributes|sort() %} -- {{ sample.extra_attributes[sample_type.attributes[attribute].name] }} - | - {% endfor %} -