Advertisement
Guest User

Untitled

a guest
Aug 7th, 2014
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var w = 600;
  2. var h = 350;
  3.  
  4.  
  5. var xScale = d3.scale.ordinal()
  6. .rangeRoundBands([0, w], 0.05);
  7.  
  8. var yScale = d3.scale.linear()
  9. .range([0, h]);
  10.  
  11. //Create SVG element
  12. var svg = d3.select(".chart-area")
  13. .append("svg")
  14. .attr("width", w)
  15. .attr("height", h);
  16.  
  17. d3.csv("month_ct.csv", type, function(error, data) {
  18.     xScale.domain(data.map(function(d) { return d.Month; }));
  19.     yScale.domain([0, d3.max(data, function(d) { return d.Ratio; })]);
  20.  
  21. //Create bars
  22. svg.selectAll("rect")
  23.     .data(data)
  24.     .enter()
  25.     .append("rect")
  26.     .attr("x", function(d) {
  27.         return xScale(d.Month);
  28.     })
  29.     .attr("y", function(d) {
  30.         return h - yScale(d.Ratio);
  31.     })
  32.     .attr("width", xScale.rangeBand())
  33.     .attr("height", function(d) {
  34.         return yScale(d.Ratio);
  35.     })
  36.     .attr("fill", function(d) {
  37.         return "rgb(0, 0, " + (d.Ratio * 10) + ")";
  38.     })
  39.     .on("mouseover", function(d) {
  40.  
  41.         //Get this bar's x/y values, then augment for the tooltip
  42.         var xPosition = parseFloat(d3.select(this).attr("x")) + xScale.rangeBand() / 2;
  43.         var yPosition = parseFloat(d3.select(this).attr("y")) / 2 + h / 2;
  44.  
  45.         //Update the tooltip position and value
  46.         d3.select("#tooltip")
  47.         .style("left", xPosition + "px")
  48.         .style("top", yPosition + "px")                    
  49.         .select("#value")
  50.         .text(d.Ratio);
  51.  
  52.         //Show the tooltip
  53.         d3.select("#tooltip").classed("hidden", false);
  54.  
  55.     })
  56.     .on("mouseout", function() {
  57.  
  58.         //Hide the tooltip
  59.         d3.select("#tooltip").classed("hidden", true);
  60.        
  61.     })
  62.     .on("click", function() {
  63.         sortBars();
  64.     });
  65.     });
  66.  
  67.     function type(d) {
  68.         d.value = +d.value;
  69.         return d;
  70.     }
  71.     //Define sort order flag
  72.     var sortOrder = false;
  73.  
  74.     //Define sort function
  75.     var sortBars = function() {
  76.  
  77.     //Flip value of sortOrder
  78.     sortOrder = !sortOrder;
  79.  
  80.     svg.selectAll("rect")
  81.     .sort(function(a, b) {
  82.         if (sortOrder) {
  83.             return d3.ascending(a.Ratio, b.Ratio);
  84.         } else {
  85.             return d3.descending(a.Ratio, b.Ratio);
  86.         }
  87.     })
  88.     .transition()
  89.     .delay(function(d, i) {
  90.         return i * 50;
  91.     })
  92.     .duration(1000)
  93.     .attr("x", function(d) {
  94.         return xScale(d.Month);
  95.     });
  96.  
  97.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement