about summary refs log tree commit diff
diff options
context:
space:
mode:
authorzsloan2019-06-28 15:59:15 -0500
committerzsloan2019-06-28 15:59:15 -0500
commitf271a933abf5e20cc137f2ac730012ac10eb6172 (patch)
tree0d92065a5919110740cfc325e49130ad68c47a44
parentd249d8fa90eabd47020926fdadbfe22ac2bba900 (diff)
downloadgenenetwork2-f271a933abf5e20cc137f2ac730012ac10eb6172.tar.gz
Added regression lines to correlation scatterplots
Fixed bug when doing correlations of non-phenotype traits against phenotype datasets

Changed color of manhattan plot points (subject to change)
-rw-r--r--wqflask/wqflask/correlation/corr_scatter_plot.py56
-rw-r--r--wqflask/wqflask/correlation/show_corr_results.py5
-rw-r--r--wqflask/wqflask/marker_regression/display_mapping_results.py4
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js85
4 files changed, 133 insertions, 17 deletions
diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py
index 925e8783..4090b70e 100644
--- a/wqflask/wqflask/correlation/corr_scatter_plot.py
+++ b/wqflask/wqflask/correlation/corr_scatter_plot.py
@@ -1,5 +1,7 @@
 from __future__ import absolute_import, print_function, division
 
+import math
+
 from flask import g
 
 from base.trait import GeneralTrait
@@ -39,6 +41,14 @@ class CorrScatterPlot(object):
         y = np.array(vals_2)
         slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
         
+        x_buffer = (max(vals_1) - min(vals_1))*0.1
+        y_buffer = (max(vals_2) - min(vals_2))*0.1
+
+        x_range = [min(vals_1) - x_buffer, max(vals_1) + x_buffer]
+        y_range = [min(vals_2) - y_buffer, max(vals_2) + y_buffer]
+
+        intercept_coords = get_intercept_coords(slope, intercept, x_range, y_range)
+
         rx = stats.rankdata(x)
         ry = stats.rankdata(y)        
         self.rdata = []
@@ -46,6 +56,13 @@ class CorrScatterPlot(object):
         self.rdata.append(ry.tolist())        
         srslope, srintercept, srr_value, srp_value, srstd_err = stats.linregress(rx, ry)
 
+        x_buffer = (max(rx) - min(rx))*0.1
+        y_buffer = (max(ry) - min(ry))*0.1
+
+        sr_range = [min(rx) - x_buffer, max(rx) + x_buffer]
+
+        sr_intercept_coords = get_intercept_coords(srslope, srintercept, sr_range, sr_range)
+
         #vals_3 = []
         #for sample in self.trait_3.data:
         #    vals_3.append(self.trait_3.data[sample].value)
@@ -68,6 +85,11 @@ class CorrScatterPlot(object):
             num_overlap = num_overlap,
             vals_1 = vals_1,
             vals_2 = vals_2,
+            x_range = x_range,
+            y_range = y_range,
+            sr_range = sr_range,
+            intercept_coords = intercept_coords,
+            sr_intercept_coords = sr_intercept_coords,
 
             slope = slope,
             intercept = intercept,
@@ -83,3 +105,37 @@ class CorrScatterPlot(object):
             #vals_3 = vals_3
         )
         self.jsdata = self.js_data
+
+
+def get_intercept_coords(slope, intercept, x_range, y_range):
+    intercept_coords = []
+
+    y1 = slope*x_range[0] + intercept
+    if slope > 0:
+        if (y1 < y_range[0]):
+            x1 = (y_range[0] - intercept)/slope
+        else:
+            x1 = x_range[0]
+        intercept_coords.append([x1, y1])
+
+        x2 = (y_range[1] - intercept)/slope
+        if (x2 > x_range[1]):
+            y2 = slope*x_range[1] + intercept
+        else:
+            y2 = y_range[1]
+    else:
+        if (y1 > y_range[1]):
+            x1 = (y_range[0] - intercept)/slope
+        else:
+            x1 = x_range[0]
+        intercept_coords.append([x1, y1])
+
+        x2 = (y_range[0] - intercept)/slope
+        if (x2 > x_range[1]):
+            y2 = slope*x_range[1] + intercept
+        else:
+            y2 = y_range[0]
+
+    intercept_coords.append([x2, y2])
+
+    return intercept_coords
\ No newline at end of file
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index 6e9abcd6..75cf5f7f 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -179,8 +179,9 @@ class CorrelationResults(object):
                 #ZS: Convert min/max chromosome to an int for the location range option
                 range_chr_as_int = None
                 for order_id, chr_info in self.dataset.species.chromosomes.chromosomes.iteritems():
-                    if chr_info.name == self.location_chr:
-                        range_chr_as_int = order_id
+                    if 'loc_chr' in start_vars:
+                        if chr_info.name == self.location_chr:
+                            range_chr_as_int = order_id
 
             for _trait_counter, trait in enumerate(self.correlation_data.keys()[:self.return_number]):
                 trait_object = GeneralTrait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False)
diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index 91fdae8f..3bcd613f 100644
--- a/wqflask/wqflask/marker_regression/display_mapping_results.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -1865,9 +1865,9 @@ class DisplayMappingResults(object):
 
                 if self.manhattan_plot == True:
                     if self.selectedChr == -1 and (previous_chr_as_int % 2 == 1):
-                        point_color = pid.grey
+                        point_color = pid.red
                     else:
-                        point_color = pid.black
+                        point_color = pid.blue
 
                     final_x_pos = Xc-canvas.stringWidth("5",font=symbolFont)/2+1
                     if final_x_pos > (xLeftOffset + plotWidth):
diff --git a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
index a74c99d3..a29e751e 100644
--- a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
@@ -11,6 +11,7 @@ var layout = {
         b: 50
     },
     xaxis: {
+        range: [js_data.x_range[0], js_data.x_range[1]],
         title: js_data.trait_1,
         zeroline: false,
         visible: true,
@@ -18,6 +19,7 @@ var layout = {
         linewidth: 1,
     },
     yaxis: {
+        range: [js_data.y_range[0], js_data.y_range[1]],
         title: js_data.trait_2,
         zeroline: false,
         visible: true,
@@ -27,6 +29,34 @@ var layout = {
     hovermode: "closest"
 }
 
+var sr_layout = {
+  height: 700,
+  width: 800,
+  margin: {
+      l: 60,
+      r: 30,
+      t: 80,
+      b: 50
+  },
+  xaxis: {
+      range: [js_data.sr_range[0], js_data.sr_range[1]],
+      title: js_data.trait_1,
+      zeroline: false,
+      visible: true,
+      linecolor: 'black',
+      linewidth: 1,
+  },
+  yaxis: {
+      range: [js_data.sr_range[0], js_data.sr_range[1]],
+      title: js_data.trait_2,
+      zeroline: false,
+      visible: true,
+      linecolor: 'black',
+      linewidth: 1,
+  },
+  hovermode: "closest"
+}
+
 cofactor1_dict = {}
 ranked_cofactor1_dict = {}
 //cofactor1_values = []
@@ -48,14 +78,23 @@ function drawg() {
       sample_names.push(js_data.indIDs[j])
     }
 
-    var trace = {
+    var trace1 = {
         x: x_values,
         y: y_values,
         mode: 'markers',
         text: sample_names
     }
 
-    Plotly.newPlot('scatterplot2', [trace], layout)
+    var trace2 = {
+      x: [js_data.intercept_coords[0][0], js_data.intercept_coords[1][0]],
+      y: [js_data.intercept_coords[0][1], js_data.intercept_coords[1][1]],
+      mode: 'lines',
+      line: {
+        color: 'rgb(250, 60, 73)'
+      }
+    }
+
+    Plotly.newPlot('scatterplot2', [trace2, trace1], layout)
 
 }
 
@@ -69,14 +108,14 @@ function srdrawg() {
       sample_names.push(js_data.indIDs[j])
     }
 
-    var trace = {
+    var trace1 = {
         x: x_values,
         y: y_values,
         mode: 'markers',
         text: sample_names
     }
 
-    Plotly.newPlot('srscatterplot2', [trace], layout)
+    Plotly.newPlot('srscatterplot2', [trace1], sr_layout)
 }
 
 function getdata() {
@@ -256,32 +295,41 @@ function getdata() {
       point_text.push(this_text)
     }
 
-    console.log("symbol list:", symbol_list)
-
     if (symbol_list.length > 0) {
-      var trace = {
+      var trace1 = {
         x: x_values,
         y: y_values,
         mode: 'markers',
         text: point_text,
         marker: {
+          color: 'rgb(66, 66, 245)',
           symbol: symbol_list,
           size: sizes
         }
       }
     } else {
-      var trace = {
+      var trace1 = {
         x: x_values,
         y: y_values,
         mode: 'markers',
         text: point_text,
         marker: {
+          color: 'rgb(66, 66, 245)',
           size: sizes
         }
       }
     }
 
-    return [trace];
+    var trace2 = {
+      x: [js_data.intercept_coords[0][0], js_data.intercept_coords[1][0]],
+      y: [js_data.intercept_coords[0][1], js_data.intercept_coords[1][1]],
+      mode: 'lines',
+      line: {
+        color: 'rgb(250, 60, 73)'
+      }
+    }
+
+    return [trace2, trace1];
 }
 
 function map1to2 (min1, max1, min2, max2, v1) {
@@ -465,18 +513,28 @@ function srgetdata() {
       point_text.push(this_text)
     }
 
-    var trace = {
+    var trace1 = {
         x: x_values,
         y: y_values,
         mode: 'markers',
         text: point_text,
         marker: {
+          color: 'rgb(66, 66, 245)',
           symbol: symbol_list,
           size: sizes
         }
     }
 
-    return [trace];
+    var trace2 = {
+      x: [js_data.sr_intercept_coords[0][0], js_data.sr_intercept_coords[1][0]],
+      y: [js_data.sr_intercept_coords[0][1], js_data.sr_intercept_coords[1][1]],
+      mode: 'lines',
+      line: {
+        color: 'rgb(250, 60, 73)'
+      }
+    }
+
+    return [trace2, trace1];
 }
 
 function chartupdatewh() {
@@ -490,7 +548,8 @@ function chartupdatewh() {
 
     Plotly.newPlot('scatterplot2', getdata(), layout)
     Plotly.relayout('scatterplot2', width_height_update)
-    Plotly.newPlot('srscatterplot2', srgetdata(), layout)
+
+    Plotly.newPlot('srscatterplot2', srgetdata(), sr_layout)
     Plotly.relayout('srscatterplot2', width_height_update)
 }
 
@@ -567,7 +626,7 @@ function chartupdatedata() {
 
     Plotly.newPlot('scatterplot2', getdata(), layout)
     Plotly.relayout('scatterplot2', pearson_title_update)
-    Plotly.newPlot('srscatterplot2', srgetdata(), layout)
+    Plotly.newPlot('srscatterplot2', srgetdata(), sr_layout)
     Plotly.relayout('srscatterplot2', spearman_title_update)
 
     if ($('#cofactor1_type option:selected').val() == "color"){