From 2f4a16b5974e32cf1f1d6f5af8bbc8d39840e24b Mon Sep 17 00:00:00 2001
From: zsloan
Date: Wed, 4 Apr 2018 16:01:00 +0000
Subject: Switched to plotly probability plot
Removed a variety of scripts that weren't being used on the trait page
---
.../new/javascript/plotly_probability_plot.js | 246 +++++++++++++++++++++
wqflask/wqflask/templates/show_trait.html | 15 +-
.../wqflask/templates/show_trait_statistics.html | 4 +-
3 files changed, 248 insertions(+), 17 deletions(-)
create mode 100644 wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
(limited to 'wqflask')
diff --git a/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
new file mode 100644
index 00000000..49fd53b1
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
@@ -0,0 +1,246 @@
+// Generated by CoffeeScript 1.9.2
+(function() {
+ var get_z_scores, redraw_prob_plot, root;
+
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+ get_z_scores = function(n) {
+ var i, j, osm_uniform, ref, x;
+ osm_uniform = new Array(n);
+ osm_uniform[n - 1] = Math.pow(0.5, 1.0 / n);
+ osm_uniform[0] = 1 - osm_uniform[n - 1];
+ for (i = j = 1, ref = n - 2; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
+ osm_uniform[i] = (i + 1 - 0.3175) / (n + 0.365);
+ }
+ return (function() {
+ var k, len, results;
+ results = [];
+ for (k = 0, len = osm_uniform.length; k < len; k++) {
+ x = osm_uniform[k];
+ results.push(jStat.normal.inv(x, 0, 1));
+ }
+ return results;
+ })();
+ };
+
+ redraw_prob_plot = function(samples, sample_group) {
+ var container, h, margin, totalh, totalw, w;
+ h = 600;
+ w = 600;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ totalh = h + margin.top + margin.bottom;
+ totalw = w + margin.left + margin.right;
+ container = $("#prob_plot_container");
+ container.width(totalw);
+ container.height(totalh);
+ var W, all_samples, chart, data, intercept, make_data, names, pvalue, pvalue_str, slope, sorted_names, sorted_values, sw_result, test_str, x, z_scores;
+ all_samples = samples[sample_group];
+ names = (function() {
+ var j, len, ref, results;
+ ref = _.keys(all_samples);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ if (all_samples[x] !== null) {
+ results.push(x);
+ }
+ }
+ return results;
+ })();
+ sorted_names = names.sort(function(x, y) {
+ return all_samples[x].value - all_samples[y].value;
+ });
+ max_decimals = 0
+ sorted_values = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = sorted_names.length; j < len; j++) {
+ x = sorted_names[j];
+ results.push(all_samples[x].value);
+ if (all_samples[x].value.countDecimals() > max_decimals) {
+ max_decimals = all_samples[x].value.countDecimals()-1
+ }
+ }
+ return results;
+ })();
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1]
+ sw_result = ShapiroWilkW(sorted_values);
+ W = sw_result.w.toFixed(3);
+ pvalue = sw_result.p.toFixed(3);
+ pvalue_str = pvalue > 0.05 ? pvalue.toString() : "" + pvalue + "";
+ test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
+ z_scores = get_z_scores(sorted_values.length);
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1]
+ slope = jStat.stdev(sorted_values);
+ intercept = jStat.mean(sorted_values);
+ make_data = function(group_name) {
+ var sample, value, z_score;
+ return {
+ key: js_data.sample_group_types[group_name],
+ slope: slope,
+ intercept: intercept,
+ values: (function() {
+ var j, len, ref, ref1, results;
+ ref = _.zip(get_z_scores(sorted_values.length), sorted_values, sorted_names);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ ref1 = ref[j], z_score = ref1[0], value = ref1[1], sample = ref1[2];
+ if (sample in samples[group_name]) {
+ results.push({
+ x: z_score,
+ y: value,
+ name: sample
+ });
+ }
+ }
+ return results;
+ })()
+ };
+ };
+ data = [make_data('samples_primary'), make_data('samples_other'), make_data('samples_all')];
+ console.log("THE DATA IS:", data);
+ x_values = {}
+ y_values = {}
+ point_names = {}
+ for (i = 0; i < 3; i++){
+ these_x_values = []
+ these_y_values = []
+ these_names = []
+ for (j = 0; j < data[i].values.length; j++){
+ these_x_values.push(data[i].values[j].x)
+ these_y_values.push(data[i].values[j].y)
+ these_names.push(data[i].values[j].name)
+ }
+ if (i == 0){
+ x_values['samples_primary'] = these_x_values
+ y_values['samples_primary'] = these_y_values
+ point_names['samples_primary'] = these_names
+ } else if (i == 1) {
+ x_values['samples_other'] = these_x_values
+ y_values['samples_other'] = these_y_values
+ point_names['samples_other'] = these_names
+ } else {
+ x_values['samples_all'] = these_x_values
+ y_values['samples_all'] = these_y_values
+ point_names['samples_all'] = these_names
+ }
+ }
+
+ intercept_line = {}
+
+ if (sample_group == "samples_primary"){
+ first_x = Math.floor(x_values['samples_primary'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_primary'][x_values['samples_primary'].length - 1])
+ last_x = last_x + last_x*0.1
+ first_value = data[0].intercept + data[0].slope * first_x
+ last_value = data[0].intercept + data[0].slope * last_x
+ intercept_line['samples_primary'] = [[first_x, last_x], [first_value, last_value]]
+ } else if (sample_group == "samples_other") {
+ first_x = Math.floor(x_values['samples_other'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_other'][x_values['samples_other'].length - 1])
+ last_x = last_x + last_x*0.1
+ first_value = data[1].intercept + data[1].slope * first_x
+ last_value = data[1].intercept + data[1].slope * last_x
+ intercept_line['samples_other'] = [[first_x, last_x], [first_value, last_value]]
+ } else {
+ first_x = Math.floor(x_values['samples_all'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_all'][x_values['samples_all'].length - 1])
+ first_value = data[2].intercept + data[2].slope * first_x
+ last_x = last_x + last_x*0.1
+ last_value = data[2].intercept + data[2].slope * last_x
+ intercept_line['samples_all'] = [[first_x, last_x], [first_value, last_value]]
+ }
+
+ var layout = {
+ margin: {
+ l: 50,
+ r: 30,
+ t: 30,
+ b: 80
+ },
+ xaxis: {
+ range: [first_x, last_x],
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ },
+ yaxis: {
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ }
+ }
+
+ var primary_trace = {
+ x: x_values['samples_primary'],
+ y: y_values['samples_primary'],
+ mode: 'markers',
+ type: 'scatter',
+ name: js_data.sample_group_types['samples_primary'],
+ text: point_names['samples_primary']
+ }
+ if ("samples_other" in js_data.sample_group_types) {
+ var other_trace = {
+ x: x_values['samples_other'],
+ y: y_values['samples_other'],
+ mode: 'markers',
+ type: 'scatter',
+ name: js_data.sample_group_types['samples_other'],
+ text: point_names['samples_other']
+ }
+ }
+
+ if (sample_group == "samples_primary"){
+ var primary_intercept_trace = {
+ x: intercept_line['samples_primary'][0],
+ y: intercept_line['samples_primary'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Intercept',
+ }
+ } else if (sample_group == "samples_other"){
+ var other_intercept_trace = {
+ x: intercept_line['samples_other'][0],
+ y: intercept_line['samples_other'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Intercept',
+ }
+ } else {
+ var all_intercept_trace = {
+ x: intercept_line['samples_all'][0],
+ y: intercept_line['samples_all'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Intercept',
+ }
+ }
+
+ if (sample_group == "samples_primary"){
+ var data = [primary_trace, primary_intercept_trace]
+ } else if (sample_group == "samples_other"){
+ var data = [other_trace, other_intercept_trace]
+ } else {
+ var data = [primary_trace, other_trace, all_intercept_trace]
+ }
+
+ console.log("TRACE:", data)
+ Plotly.newPlot('prob_plot_div', data, layout)
+ };
+
+ root.redraw_prob_plot_impl = redraw_prob_plot;
+
+}).call(this);
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index dd4325e7..5d128b4a 100644
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -133,34 +133,21 @@
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-