about summary refs log tree commit diff
path: root/wqflask
diff options
context:
space:
mode:
authorLei Yan2013-11-14 19:56:42 +0000
committerLei Yan2013-11-14 19:56:42 +0000
commit47856e327c4367b1aa7e953a53e87c347eee5068 (patch)
tree5bc4a6812aefccb5781794ff4e22d4c290455018 /wqflask
parentf1e215c78f2d5889cad18d36c1c28623c924b768 (diff)
downloadgenenetwork2-47856e327c4367b1aa7e953a53e87c347eee5068.tar.gz
Can change the parameters of Sample Correlation Scatterplot
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/wqflask/correlation/corr_scatter_plot.py71
-rw-r--r--wqflask/wqflask/static/new/css/corr_scatter_plot.css4
-rw-r--r--wqflask/wqflask/static/new/javascript/corr_scatter_plot.js76
-rw-r--r--wqflask/wqflask/templates/corr_scatter_plot.html37
4 files changed, 165 insertions, 23 deletions
diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py
index 13022b44..dd98c7d5 100644
--- a/wqflask/wqflask/correlation/corr_scatter_plot.py
+++ b/wqflask/wqflask/correlation/corr_scatter_plot.py
@@ -3,6 +3,8 @@ from __future__ import absolute_import, print_function, division
 from base.trait import GeneralTrait
 from base import data_set
 from utility import corr_result_helpers
+from scipy import stats
+import numpy as np
 
 class CorrScatterPlot(object):
 
@@ -11,14 +13,69 @@ class CorrScatterPlot(object):
         self.data_set_2 = data_set.create_dataset(params['dataset_2'])
         self.trait_1 = GeneralTrait(name=params['trait_1'], dataset=self.data_set_1)
         self.trait_2 = GeneralTrait(name=params['trait_2'], dataset=self.data_set_2)
+        
+        try:
+            width = int(params['width'])
+        except:
+            width = 800
+        self.width = width
+        
+        try:
+            height = int(params['height'])
+        except:
+            height = 600
+        self.height = height
+        
+        try:
+            circle_color = params['circle_color']
+        except:
+            circle_color = 'steelblue'
+        self.circle_color = circle_color
+        
+        try:
+            circle_radius = int(params['circle_radius'])
+        except:
+            circle_radius = 5
+        self.circle_radius = circle_radius
+        
+        try:
+            line_color = params['line_color']
+        except:
+            line_color = 'red'
+        self.line_color = line_color
+        
+        try:
+            line_width = int(params['line_width'])
+        except:
+            line_width = 1
+        self.line_width = line_width
+        
+        samples_1, samples_2, num_overlap = corr_result_helpers.normalize_values_with_samples(self.trait_1.data, self.trait_2.data)
         vals_1 = []
-        for sample in self.trait_1.data.keys():
-            vals_1.append(self.trait_1.data[sample].value)
+        for sample in samples_1.keys():
+            vals_1.append(samples_1[sample].value)
         vals_2 = []
-        for sample in self.trait_2.data.keys():
-            vals_2.append(self.trait_2.data[sample].value)
-        samples_1, samples_2, num_overlap = corr_result_helpers.normalize_values_with_samples(self.trait_1.data, self.trait_2.data)
+        for sample in samples_2.keys():
+            vals_2.append(samples_2[sample].value)
+        x = np.array(vals_1)
+        y = np.array(vals_2)
+        slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
         self.js_data = dict(
+            trait_1 = self.trait_1.dataset.name + ": " + self.trait_1.name,
+            trait_2 = self.trait_2.dataset.name + ": " + self.trait_2.name,
             samples_1 = samples_1,
-            samples_2 = samples_2
-        )
\ No newline at end of file
+            samples_2 = samples_2,
+            num_overlap = num_overlap,
+            vals_1 = vals_1,
+            vals_2 = vals_2,
+            slope = slope,
+            intercept = intercept,
+            r_value = r_value,
+            p_value = p_value,
+            width = width,
+            height = height,
+            circle_color = circle_color,
+            circle_radius = circle_radius,
+            line_color = line_color,
+            line_width = line_width
+        )
diff --git a/wqflask/wqflask/static/new/css/corr_scatter_plot.css b/wqflask/wqflask/static/new/css/corr_scatter_plot.css
index 602c7297..c62d4c9a 100644
--- a/wqflask/wqflask/static/new/css/corr_scatter_plot.css
+++ b/wqflask/wqflask/static/new/css/corr_scatter_plot.css
@@ -11,7 +11,3 @@
     stroke: black;
     fill: none;
 }
-
-circle {
-    fill: steelblue;
-}
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/corr_scatter_plot.js b/wqflask/wqflask/static/new/javascript/corr_scatter_plot.js
index 180e6240..26132492 100644
--- a/wqflask/wqflask/static/new/javascript/corr_scatter_plot.js
+++ b/wqflask/wqflask/static/new/javascript/corr_scatter_plot.js
@@ -5,21 +5,25 @@ i = 0;
 for (var samplename in samples_1){
 	sample1 = samples_1[samplename];
 	sample2 = samples_2[samplename];
-	data[i] = [sample1.value, sample2.value];
-	i++;
+	data[i++] = [sample1.value, sample2.value];
 }
    
-    var margin = {top: 20, right: 15, bottom: 60, left: 60}
-      , width = 800 - margin.left - margin.right
-      , height = 600 - margin.top - margin.bottom;
+    var margin = {top: 100, right: 15, bottom: 60, left: 60};
+    var width = js_data.width - margin.left - margin.right;
+    var height = js_data.height - margin.top - margin.bottom;
+      
+    minx = d3.min(data, function(d){return d[0];})*0.95;
+    maxx = d3.max(data, function(d){return d[0];})*1.05;
+    miny = d3.min(data, function(d){return d[1];})*0.95;
+    maxy = d3.max(data, function(d){return d[1];})*1.05;
     
     var x = d3.scale.linear()
-              .domain([d3.min(data, function(d){return d[0];})*0.95, d3.max(data, function(d) { return d[0]; })*1.05])
-              .range([ 0, width ]);
+              .domain([minx, maxx])
+              .range([0, width]);
     
     var y = d3.scale.linear()
-    	      .domain([d3.min(data, function(d){return d[1];})*0.95, d3.max(data, function(d) { return d[1]; })*1.05])
-    	      .range([ height, 0 ]);
+    	      .domain([miny, maxy])
+    	      .range([height, 0]);
  
     var chart = d3.select('#scatter_plot')
 	.append('svg:svg')
@@ -54,10 +58,58 @@ for (var samplename in samples_1){
 	.call(yAxis);
 
     var g = main.append("svg:g"); 
-    
+	
     g.selectAll("scatter-dots")
       .data(data)
       .enter().append("svg:circle")
-          .attr("cx", function (d,i) { return x(d[0]); } )
+          .attr("cx", function (d) { return x(d[0]); } )
           .attr("cy", function (d) { return y(d[1]); } )
-          .attr("r", 6);
\ No newline at end of file
+		  .attr("fill", js_data.circle_color)
+          .attr("r", js_data.circle_radius);
+          
+    main.append('line')
+        .attr('x1', x(minx))
+        .attr('y1', y(js_data.slope*minx+js_data.intercept))
+        .attr('x2', x(maxx*0.995))
+        .attr('y2', y(js_data.slope*maxx*0.995+js_data.intercept))
+        .style('stroke', js_data.line_color)
+        .style('stroke-width', js_data.line_width);
+        
+    chart.append("text")
+      .attr("x", width/2)
+      .attr("y", margin.top/2-25)
+      .text("Sample Correlation Scatterplot");
+      
+    text = "";
+    text += "N=" + js_data.num_overlap;
+    chart.append("text")
+      .attr("x", margin.left)
+      .attr("y", margin.top/2-5)
+      .text(text);
+    
+    text = "";
+    text += "r=" + js_data.r_value + "\t";
+    text += "p(r)=" + js_data.p_value;
+    chart.append("text")
+      .attr("x", margin.left)
+      .attr("y", margin.top/2+15)
+      .text(text);
+    
+    text = "";
+    text += "slope=" + js_data.slope + "\t";
+    text += "intercept=" + js_data.intercept;
+    chart.append("text")
+      .attr("x", margin.left)
+      .attr("y", margin.top/2+35)
+      .text(text);
+      
+    chart.append("text")
+      .attr("x", width/2)
+      .attr("y", height+margin.top+35)
+      .text(js_data.trait_1);
+      
+    chart.append("text")
+      .attr("x", 20)
+      .attr("y", height/2+margin.top+30)
+      .attr('transform', 'rotate(-90 20,' + (height/2+margin.top+30) + ')')
+      .text(js_data.trait_2);
diff --git a/wqflask/wqflask/templates/corr_scatter_plot.html b/wqflask/wqflask/templates/corr_scatter_plot.html
index b25110d7..dd9168a8 100644
--- a/wqflask/wqflask/templates/corr_scatter_plot.html
+++ b/wqflask/wqflask/templates/corr_scatter_plot.html
@@ -9,6 +9,43 @@
 {% endblock %}
 
 {% block content %}
+<form action="" method="get">
+<input type="hidden" name="dataset_1" value="{{data_set_1.name}}">
+<input type="hidden" name="dataset_2" value="{{data_set_2.name}}">
+<input type="hidden" name="trait_1" value="{{trait_1.name}}">
+<input type="hidden" name="trait_2" value="{{trait_2.name}}">
+<table class="table" style="width: auto;">
+    <tr>
+		<td>Canvas Width</td>
+		<td>Canvas Height</td>
+		<td>Circle Color</td>
+		<td>Circle Radius</td>
+        <td>Line Color</td>
+		<td>Line Width</td>
+        <td rowspan="2" style="vertical-align:middle;"><button type="submit" class="btn btn-primary"><i class="icon-refresh"></i>Redraw</button></td>
+    </tr>
+    <tr>
+		<td><input type="text" name="width" value="{{width}}" style="width: 100px;"></td>
+		<td><input type="text" name="height" value="{{height}}" style="width: 100px;"></td>
+        <td>
+            <select name="circle_color" style="width: 100px;">
+                <option value="red">Red</option>
+                <option value="green">Green</option>
+                <option value="blue">Blue</option>
+            </select>
+        </td>
+		<td><input type="text" name="circle_radius" value="{{circle_radius}}" style="width: 100px;"></td>
+        <td>
+            <select name="line_color" style="width: 100px;">
+                <option value="red">Red</option>
+                <option value="green">Green</option>
+                <option value="blue">Blue</option>
+            </select>
+        </td>
+		<td><input type="text" name="line_width" value="{{line_width}}" style="width: 100px;"></td>
+    </tr>
+</table>
+</form>
 <div id='scatter_plot'></div>
 {% endblock %}