about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZachary Sloan2013-11-01 21:48:06 +0000
committerZachary Sloan2013-11-01 21:48:06 +0000
commitc167c2e04875dfdb6611ecef906a51d7fbd4259f (patch)
tree863cc7b15dafeb761ec8d051957ab4e7c402fa65
parent46c8900b2f9c72560542afaefcc6530119c084b2 (diff)
downloadgenenetwork2-c167c2e04875dfdb6611ecef906a51d7fbd4259f.tar.gz
Made the extra attribute bar chart coloring continue to work
when the user sorts and gave the option to revert to no coloring
-rw-r--r--misc/gn_installation_notes.txt6
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.coffee59
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js69
-rw-r--r--wqflask/wqflask/templates/show_trait_statistics_new.html11
4 files changed, 93 insertions, 52 deletions
diff --git a/misc/gn_installation_notes.txt b/misc/gn_installation_notes.txt
index a73e7d4f..584080f7 100644
--- a/misc/gn_installation_notes.txt
+++ b/misc/gn_installation_notes.txt
@@ -304,6 +304,12 @@ sudo apt-get install colordiff
 
 ==========================================
 
+Install NTP (network time protocol)
+
+sudo apt-get install ntp
+
+==========================================
+
 To get server running:
 
 !If having seemingly inexplicable problems with imports, make sure I've started the environment!
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.coffee b/wqflask/wqflask/static/new/javascript/show_trait.coffee
index d236b795..66110469 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.coffee
+++ b/wqflask/wqflask/static/new/javascript/show_trait.coffee
@@ -85,15 +85,16 @@ $ ->
             
             d3.select("#color_attribute").on("change", =>
                 attribute = $("#color_attribute").val()
-                console.log("attribute:", attribute)
                 if $("#update_bar_chart").html() == 'Sort By Name' 
                     @svg.selectAll(".bar")
                         .data(@sorted_samples())
                         .transition()
                         .duration(1000)
                         .style("fill", (d) =>
-                            attr_color_dict = @get_attr_color_dict()
-                            return attr_color_dict[attribute][d[2][attribute]]
+                            if attribute == "None"
+                                return "steelblue"
+                            else
+                                return @attr_color_dict[attribute][d[2][attribute]]
                         )
                         .select("title")
                         .text((d) =>
@@ -101,17 +102,21 @@ $ ->
                         )
                 else
                     @svg.selectAll(".bar")
-                        .data(@sample_attr_vals)
+                        .data(@samples)
                         .transition()
                         .duration(1000)
                         .style("fill", (d) =>
-                            attr_color_dict = @get_attr_color_dict()
-                            return attr_color_dict[attribute][d[attribute]]
+                            if attribute == "None"
+                                return "steelblue"
+                            else
+                                return @attr_color_dict[attribute][d[2][attribute]]
                         )
             )
         
         
             d3.select("#update_bar_chart").on("click", =>
+                if @attributes.length > 0
+                    attribute = $("#color_attribute").val()
                 if $("#update_bar_chart").html() == 'Sort By Value' 
                     $("#update_bar_chart").html('Sort By Name')
                     sortItems = (a, b) ->
@@ -127,7 +132,12 @@ $ ->
                         .attr("height", (d) =>
                             return @plot_height - @y_scale(d[1])
                         )
-                        .style("fill", "steelblue")
+                        .style("fill", (d) =>
+                            if @attributes.length > 0
+                                return @attr_color_dict[attribute][d[2][attribute]]
+                            else
+                                return "steelblue"
+                        )
                         .select("title")
                         .text((d) =>
                             return d[1]
@@ -141,19 +151,24 @@ $ ->
                 else
                     $("#update_bar_chart").html('Sort By Value')
                     @svg.selectAll(".bar")
-                        .data(@sample_vals)
+                        .data(@samples)
                         .transition()
                         .duration(1000)
                         .attr("y", (d) =>
-                            return @y_scale(d)
+                            return @y_scale(d[1])
                         )
                         .attr("height", (d) =>
-                            return @plot_height - @y_scale(d)
+                            return @plot_height - @y_scale(d[1])
+                        )
+                        .style("fill", (d) =>
+                            if @attributes.length > 0
+                                return @attr_color_dict[attribute][d[2][attribute]]
+                            else
+                                return "steelblue"
                         )
-                        .style("fill", "steelblue")
                         .select("title")
                         .text((d) =>
-                            return d
+                            return d[1]
                         )
                     x_scale = d3.scale.ordinal()
                         .domain(@sample_names)
@@ -164,14 +179,12 @@ $ ->
 
         get_attr_color_dict: () ->
             color = d3.scale.category20()
-            attr_color_dict = {}
+            @attr_color_dict = {}
             for own key, attribute_info of js_data.attribute_names
                 this_color_dict = {}
                 for value, i in attribute_info.distinct_values
                     this_color_dict[value] = color(i)
-                attr_color_dict[attribute_info.name] = this_color_dict
-                
-            return attr_color_dict
+                @attr_color_dict[attribute_info.name] = this_color_dict
             
             
             
@@ -188,7 +201,9 @@ $ ->
                     for attribute in @attributes
                         attr_vals[attribute] = sample["extra_attributes"][attribute]
                     @sample_attr_vals.push(attr_vals)
-            console.log("sample_attr_vals:", @sample_attr_vals)
+            @samples = _.zip(@sample_names, @sample_vals, @sample_attr_vals)
+            @get_attr_color_dict()
+            console.log("samples:", @samples)
             
         create_svg: () ->
             svg = d3.select("#bar_chart")
@@ -253,7 +268,7 @@ $ ->
 
         add_bars: () ->
             @svg.selectAll(".bar")
-                .data(_.zip(@sample_names, @sample_vals))
+                .data(@samples)
               .enter().append("rect")
                 .style("fill", "steelblue")
                 .attr("class", "bar")
@@ -273,10 +288,10 @@ $ ->
                 )
 
         sorted_samples: () ->
-            if @sample_attr_vals.length > 0
-                sample_list = _.zip(@sample_names, @sample_vals, @sample_attr_vals)
-            else
-                sample_list = _.zip(@sample_names, @sample_vals)
+            #if @sample_attr_vals.length > 0
+            sample_list = _.zip(@sample_names, @sample_vals, @sample_attr_vals)
+            #else
+            #    sample_list = _.zip(@sample_names, @sample_vals)
             sorted = _.sortBy(sample_list, (sample) =>
                 return sample[1]
             )
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index 22e20180..4e7fe8f8 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -95,25 +95,31 @@
         d3.select("#color_attribute").on("change", function() {
           var attribute;
           attribute = $("#color_attribute").val();
-          console.log("attribute:", attribute);
           if ($("#update_bar_chart").html() === 'Sort By Name') {
             return _this.svg.selectAll(".bar").data(_this.sorted_samples()).transition().duration(1000).style("fill", function(d) {
-              var attr_color_dict;
-              attr_color_dict = _this.get_attr_color_dict();
-              return attr_color_dict[attribute][d[2][attribute]];
+              if (attribute === "None") {
+                return "steelblue";
+              } else {
+                return _this.attr_color_dict[attribute][d[2][attribute]];
+              }
             }).select("title").text(function(d) {
               return d[1];
             });
           } else {
-            return _this.svg.selectAll(".bar").data(_this.sample_attr_vals).transition().duration(1000).style("fill", function(d) {
-              var attr_color_dict;
-              attr_color_dict = _this.get_attr_color_dict();
-              return attr_color_dict[attribute][d[attribute]];
+            return _this.svg.selectAll(".bar").data(_this.samples).transition().duration(1000).style("fill", function(d) {
+              if (attribute === "None") {
+                return "steelblue";
+              } else {
+                return _this.attr_color_dict[attribute][d[2][attribute]];
+              }
             });
           }
         });
         d3.select("#update_bar_chart").on("click", function() {
-          var sortItems, sorted_sample_names, x_scale;
+          var attribute, sortItems, sorted_sample_names, x_scale;
+          if (_this.attributes.length > 0) {
+            attribute = $("#color_attribute").val();
+          }
           if ($("#update_bar_chart").html() === 'Sort By Value') {
             $("#update_bar_chart").html('Sort By Name');
             sortItems = function(a, b) {
@@ -123,7 +129,13 @@
               return _this.y_scale(d[1]);
             }).attr("height", function(d) {
               return _this.plot_height - _this.y_scale(d[1]);
-            }).style("fill", "steelblue").select("title").text(function(d) {
+            }).style("fill", function(d) {
+              if (_this.attributes.length > 0) {
+                return _this.attr_color_dict[attribute][d[2][attribute]];
+              } else {
+                return "steelblue";
+              }
+            }).select("title").text(function(d) {
               return d[1];
             });
             sorted_sample_names = (function() {
@@ -141,12 +153,18 @@
             return _this.add_x_axis(x_scale);
           } else {
             $("#update_bar_chart").html('Sort By Value');
-            _this.svg.selectAll(".bar").data(_this.sample_vals).transition().duration(1000).attr("y", function(d) {
-              return _this.y_scale(d);
+            _this.svg.selectAll(".bar").data(_this.samples).transition().duration(1000).attr("y", function(d) {
+              return _this.y_scale(d[1]);
             }).attr("height", function(d) {
-              return _this.plot_height - _this.y_scale(d);
-            }).style("fill", "steelblue").select("title").text(function(d) {
-              return d;
+              return _this.plot_height - _this.y_scale(d[1]);
+            }).style("fill", function(d) {
+              if (_this.attributes.length > 0) {
+                return _this.attr_color_dict[attribute][d[2][attribute]];
+              } else {
+                return "steelblue";
+              }
+            }).select("title").text(function(d) {
+              return d[1];
             });
             x_scale = d3.scale.ordinal().domain(_this.sample_names).rangeBands([0, _this.plot_width], .1);
             $('.x.axis').remove();
@@ -156,10 +174,11 @@
       }
 
       Histogram.prototype.get_attr_color_dict = function() {
-        var attr_color_dict, attribute_info, color, i, key, this_color_dict, value, _i, _len, _ref, _ref1;
+        var attribute_info, color, i, key, this_color_dict, value, _i, _len, _ref, _ref1, _results;
         color = d3.scale.category20();
-        attr_color_dict = {};
+        this.attr_color_dict = {};
         _ref = js_data.attribute_names;
+        _results = [];
         for (key in _ref) {
           if (!__hasProp.call(_ref, key)) continue;
           attribute_info = _ref[key];
@@ -169,9 +188,9 @@
             value = _ref1[i];
             this_color_dict[value] = color(i);
           }
-          attr_color_dict[attribute_info.name] = this_color_dict;
+          _results.push(this.attr_color_dict[attribute_info.name] = this_color_dict);
         }
-        return attr_color_dict;
+        return _results;
       };
 
       Histogram.prototype.get_samples = function() {
@@ -223,7 +242,9 @@
             this.sample_attr_vals.push(attr_vals);
           }
         }
-        return console.log("sample_attr_vals:", this.sample_attr_vals);
+        this.samples = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
+        this.get_attr_color_dict();
+        return console.log("samples:", this.samples);
       };
 
       Histogram.prototype.create_svg = function() {
@@ -260,7 +281,7 @@
 
       Histogram.prototype.add_bars = function() {
         var _this = this;
-        return this.svg.selectAll(".bar").data(_.zip(this.sample_names, this.sample_vals)).enter().append("rect").style("fill", "steelblue").attr("class", "bar").attr("x", function(d) {
+        return this.svg.selectAll(".bar").data(this.samples).enter().append("rect").style("fill", "steelblue").attr("class", "bar").attr("x", function(d) {
           return _this.x_scale(d[0]);
         }).attr("width", this.x_scale.rangeBand()).attr("y", function(d) {
           return _this.y_scale(d[1]);
@@ -274,11 +295,7 @@
       Histogram.prototype.sorted_samples = function() {
         var sample_list, sorted,
           _this = this;
-        if (this.sample_attr_vals.length > 0) {
-          sample_list = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
-        } else {
-          sample_list = _.zip(this.sample_names, this.sample_vals);
-        }
+        sample_list = _.zip(this.sample_names, this.sample_vals, this.sample_attr_vals);
         sorted = _.sortBy(sample_list, function(sample) {
           return sample[1];
         });
diff --git a/wqflask/wqflask/templates/show_trait_statistics_new.html b/wqflask/wqflask/templates/show_trait_statistics_new.html
index 58389ce4..105c4f95 100644
--- a/wqflask/wqflask/templates/show_trait_statistics_new.html
+++ b/wqflask/wqflask/templates/show_trait_statistics_new.html
@@ -2,18 +2,21 @@
     <br>

     <h2>Charts and Figures</h2>

     <div class="well form-horizontal">

+        {% if sample_groups|length > 1 %}

         <select class="stats_samples_group">

             {% for group, pretty_group in sample_group_types.items() %}

                 <option value="{{ group }}">{{ pretty_group }}</option>

             {% endfor %}

         </select>

+        {% endif %}

         {% if sample_groups[0].attributes %}

         <div class="input-append">

             <select id="color_attribute" size=1>

-              {% for attribute in sample_groups[0].attributes %}

-              <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">

-                  {{ sample_groups[0].attributes[attribute].name }}</option>

-              {% endfor %}

+                <option value="None">None</option>

+                {% for attribute in sample_groups[0].attributes %}

+                <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">

+                    {{ sample_groups[0].attributes[attribute].name }}</option>

+                {% endfor %}

             </select>

         </div>

         {% endif %}