block by mccannf 4703854

4703854

Full Screen

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Afghanistan Troops</title>
 <script type="text/javascript" src="//d3js.org/d3.v3.min.js"></script>
    <style type="text/css">
body {
  font: 10px sans-serif;
}

.title{
  font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
	font-size: 18px;
	color: #073E71;
}

svg {
  width: 960px;
  height: 500px;
  border: solid 1px #ccc;
  font: 10px sans-serif;
  shape-rendering: crispEdges;
}

.Afghan	rect:hover {
				fill: green;
			}
			
rect:hover {
				fill: purple;
			}
			
.Other Foreign	rect:hover {
				fill: purple;
			}			
		
#tooltip {
	position: absolute;
	width: 200px;
	height: auto;
	padding: 10px;
	background-color: white;
	.transparent {
	  zoom: 1;
	  filter: alpha(opacity=50);
	  opacity: 0.5;
	}
					-webkit-border-radius: 10px;
					-moz-border-radius: 10px;
					border-radius: 10px;
					-webkit-box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4);
					-moz-box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4);
					box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4);
					pointer-events: none;
}
				
#tooltip.hidden {
	display: none;
}
				
#tooltip p {
	margin: 0;
	font-family: sans-serif;
	font-size: 16px;
	line-height: 20px;
	opacity:1;
}

.nonopaque {
	opacity: 1;
}

.semiopaque {
	opacity: 0.5;
}


    </style>
  </head>
  <body>
     <div id="tooltip" class="hidden">
   		<p><strong><span id="tipdate">Month and year go here</span></strong></p>
   		<p><span id="tipcat">Heading</span></p>
		<p><span id="tipval">100</span></p>
   </div>
   
 <div>
<span class="title">Troops and Security forces in Afghanistan 2001-2012</span>
</div>
    <script type="text/javascript">

var w = 960,
    h = 500,
    p = [20, 50, 30, 20],
    x = d3.scale.ordinal().rangeRoundBands([0, w - p[1] - p[3]]),
    y = d3.scale.linear().range([0, h - p[0] - p[2]]),
    z = d3.scale.ordinal().range(["darkblue", "blue", "lightblue"]),
    cats = d3.scale.ordinal().range(["Afghan","US", "OtherForeign"]),
    interpolated = d3.scale.ordinal().range(["nonopaque","semiopaque"]),
    parse = d3.time.format("%B-%y").parse,
    format = d3.time.format("%y")
	tipformat = d3.time.format("%B-%y");

var svg = d3.select("body").append("svg:svg")
    .attr("width", w)
    .attr("height", h)
  .append("svg:g")
    .attr("transform", "translate(" + p[3] + "," + (h - p[2]) + ")");
	
	
		var gmouseover = function() {
				
						
			
		
					var troopCat = String(d3.select(this).attr("data-measure"));
			
					
					d3.select("#tooltip")					
					.select("#tipcat")
					.text(function(d){ return troopCat});
			
			   
					//Show the tooltip
				//	d3.select("#tooltip").classed("hidden", false);
   };
   
   
/*var gmouseout= function(d) {
			   var rect=d3.select(this);
					Hide the tooltip
					d3.select("#tooltip").classed("hidden", true)
};*/
	
	
	
	var rectmouseover = function() {
				
						
			
		
					//Get this bar's x/y values, then augment for the tooltip
					var xPosition = parseFloat(d3.select(this).attr("x")) + 100;
					var yPosition = parseFloat(d3.select(this).attr("y")) + h;
					var theDate = (d3.select(this).attr("title"));
					var numTroops = d3.format(",.0f")(d3.select(this).attr("class"));
//							
					//Update the tooltip position and value
	
					
					d3.select("#tooltip")					
						.select("#tipdate")
						.text(function(d){ return theDate});
					
					
					
					/*d3.select("#tooltip")					
					.select("#tipcat")
					.text(function(d){ return troopCat});*/
					
					
					d3.select("#tooltip")	
						.style("left", xPosition + "px")
						.style("top", yPosition + "px")						
						.select("#tipval")
						.text(function(d){ return numTroops});
						
				
						
					
			   
					//Show the tooltip
					d3.select("#tooltip").classed("hidden", false);
   };
   
   
var rectmouseout= function(d) {
			   var rect=d3.select(this);
			   rect.transition().duration(100)
				.style("fill", function(d) { return color(d.name); })
				.style("stroke", "none");		
					//Hide the tooltip
					d3.select("#tooltip").classed("hidden", true)
};

var data= d3.csv("index.csv", function(afghan) {


/*   var troopNames= d3.keys(data[0]).filter(function(key) { return key !==mydate; });
  console.log(troopNames);*/
  // Transpose the data into layers by tnum.
  var trooptypes = d3.layout.stack()(["Afghan Security Forces","U.S. Troops", "Other Foreign Troops" ].map(function(tnum) {
    return afghan.map(function(d) {
      return {x: parse(d.mydate), y: +d[tnum]};
    });
  }))
  
 //.attr("class", function(troopNames, i){return d(i);});
  // .values(function(d) { return d.tnum; });
  console.log(trooptypes);
  
    var interp = d3.layout.stack()(["afghaninterpolated","usinterpolated", "otherinterpolated" ].map(function(tinterp) {
    return afghan.map(function(d) {
      return {inter:  +d[tinterp]};
    });
  }))
  console.log(interp);
 var thedata = data;



  // Compute the x-domain (by date) and y-domain (by top).
  x.domain(trooptypes[0].map(function(d) { return d.x; }));
  y.domain([0, d3.max(trooptypes[trooptypes.length - 1], function(d) { return d.y0 + d.y; })]);

  // Add a group for each tnum.
  var tnum = svg.selectAll("g.tnum")
      .data(trooptypes)
    .enter().append("svg:g")
        //.attr("class", (function(thedata) { return d[0]; }))
      .style("fill", function(d, i) { return z(i); })
	  .attr("data-measure", function(d, i) { return cats(i); })
	  .on("mouseover", gmouseover);
	// .on("mouseout", gmouseout);
        
  // Add a rect for each date.
  var rect = tnum.selectAll("rect")
      .data(Object)
    .enter().append("svg:rect")
      .attr("x", function(d) { return x(d.x); })
      .attr("y", function(d) { return -y(d.y0) - y(d.y); })
      .attr("height", function(d) { return y(d.y); })
      .attr("width", x.rangeBand())
	  .attr("title",  function(d) { return d.x; }) 
	  .attr("data-measure", function(d) { return d.y; })
	/*.style("fill", function(d, i) { if (d.int == 1) {return "red"}	// if close is less than 400 fill = red
			else 	{ return ;}})*/
	 // .text(function(d){return d.parentNode.attr("class")})
	  .on("mouseover", rectmouseover)
	 .on("mouseout", rectmouseout);


  var interp = rect.selectAll("rect")
  	.data(interp)
      .enter().append("svg:g")
        .style("fill", "white")
        .attr("class", function(d) {return interpolated(d.inter); });
        
//
//   Add a label per date.
  var label = svg.selectAll("text")
      .data(x.domain())
    .enter().append("svg:text")
      .attr("x", function(d) { return x(d) + x.rangeBand() / 2; })
      .attr("y", 6)
      .attr("text-anchor", "middle")
      .attr("dy", ".71em")
	 .text(format);

  // Add y-axis rules.
  var rule = svg.selectAll("g.rule")
      .data(y.ticks(5))
    .enter().append("svg:g")
      .attr("class", "rule")
      .attr("transform", function(d) { return "translate(0," + -y(d) + ")"; });

  rule.append("svg:line")
      .attr("x2", w - p[1] - p[3])
      .style("stroke", function(d) { return d ? "#fff" : "#000"; })
      .style("stroke-opacity", function(d) { return d ? .7 : null; });

  rule.append("svg:text")
      .attr("x", w - p[1] - p[3] + 6)
      .attr("dy", ".35em")
      .text(d3.format(",d"));
});

    </script>
  </body>
</html>

index.csv

mydate,Afghan Security Forces,afghaninterpolated,U.S. Troops,usinterpolated,Other Foreign Troops,otherinterpolated
November-01,0,0,1300,0,0,0
December-01,240,1,2500,0,1667,1
January-02,480,1,4067,0,3333,1
February-02,720,1,5633,0,5000,0
March-02,960,1,7200,0,5000,0
April-02,1200,1,7425,0,5000,0
May-02,1440,1,7650,0,4500,0
June-02,1680,1,7875,0,5000,0
July-02,1920,1,8100,0,4900,1
August-02,2160,1,8567,0,4800,1
September-02,2400,1,9033,0,4700,0
October-02,2640,1,9500,0,4743,1
November-02,2880,1,9500,0,4786,1
December-02,3120,1,9700,0,4829,1
January-03,3360,1,9600,0,4871,1
February-03,3600,1,9600,0,4913,1
March-03,3840,1,9500,0,4957,1
April-03,4080,1,9300,0,5000,0
May-03,4320,1,9800,0,5000,1
June-03,4560,1,9900,0,5000,1
July-03,4800,1,9800,0,5000,1
August-03,5040,1,10100,0,5000,1
September-03,5280,1,9700,0,5000,0
October-03,5520,1,10400,0,5071,1
November-03,5760,1,12000,0,5142,1
December-03,6000,0,13100,0,5213,1
January-04,10250,1,13600,0,5284,1
February-04,14500,1,12300,0,5355,1
March-04,18750,1,14000,0,5426,1
April-04,23000,1,20300,0,5500,0
May-04,27250,1,17700,0,5750,1
June-04,31500,1,17800,0,6000,0
July-04,35750,1,17300,0,6250,1
August-04,40000,1,15800,0,6500,0
September-04,44250,1,16600,0,8000,0
October-04,48500,1,16100,0,10000,0
November-04,52750,1,15800,0,9400,0
December-04,57000,0,16700,0,8500,0
January-05,57750,1,17200,0,9000,0
February-05,58500,1,17300,0,8000,0
March-05,59250,1,19000,0,8000,1
April-05,60000,1,19500,0,8000,1
May-05,60750,1,18000,0,8000,1
June-05,61500,1,18200,0,8000,0
July-05,62250,1,17900,0,9250,1
August-05,63000,1,17900,0,10500,0
September-05,63750,1,17500,0,10125,1
October-05,64500,1,17800,0,9750,1
November-05,65250,1,17400,0,9375,1
December-05,66000,0,17800,0,9000,0
January-06,67667,1,19700,0,9000,1
February-06,69334,1,22600,0,9000,1
March-06,71001,1,22900,0,9000,1
April-06,72668,1,23300,0,9000,1
May-06,74335,1,22000,0,9000,0
June-06,76000,0,22000,0,9700,0
July-06,77667,1,21000,0,12350,1
August-06,79334,1,19700,0,15000,0
September-06,81001,1,20400,0,18000,0
October-06,82668,1,20800,0,20000,0
November-06,84335,1,20400,0,21000,0
December-06,86000,0,22100,0,21000,0
January-07,89250,1,26000,0,21460,0
February-07,92500,1,25200,0,21605,1
March-07,95750,1,24300,0,21750,0
April-07,99000,1,24100,0,21750,0
May-07,102250,1,26500,0,24000,0
June-07,105500,1,23700,0,24125,1
July-07,108750,1,23800,0,24250,0
August-07,112000,1,24000,0,25146.5,1
September-07,115250,1,24500,0,26043,0
October-07,118500,1,24800,0,30177,0
November-07,121750,1,24700,0,28440,1
December-07,125000,0,24700,0,26703,0
January-08,128178,1,27500,0,27476.5,1
February-08,131355,1,27000,0,28250,0
March-08,134533,1,30500,0,28125,1
April-08,137710,0,32500,0,28000,0
May-08,139410,1,31300,0,28675,1
June-08,141100,1,30700,0,29350,0
July-08,142810,1,33700,0,29503,1
August-08,144510,1,31700,0,29656,1
September-08,146210,1,32400,0,29810,0
October-08,147910,0,32400,0,30100,0
November-08,150866,1,30858,0,31150,0
December-08,153822,1,31800,0,31400,0
January-09,156778,1,34400,0,31880,0
February-09,159734,1,36600,0,31520,0
March-09,162690,0,38800,0,32140,0
April-09,165247.5,1,41500,0,32175,0
May-09,167805,1,52100,0,32227.5,1
June-09,170362.5,1,57600,0,32280,0
July-09,172920,0,62800,0,34550,0
August-09,177190,1,62200,0,35110,1
September-09,181460,1,65200,0,35670,1
October-09,185730,1,67100,0,36230,0
November-09,190000,0,67300,0,37300,1
December-09,195089,0,67400,0,38370,0
January-10,201726,1,71700,0,38540,1
February-10,207863,1,76500,0,38710,0
March-10,215000,0,84700,0,38890,0
April-10,219423.5,1,83000,0,40139,0
May-10,223847,0,87000,0,40604.5,1
June-10,230231,1,93000,0,41070,0
July-10,236615,1,96000,0,41315,0
August-10,243000,0,100000,0,41389,0
September-10,258668,0,95000,0,40910.5,1
October-10,261005,0,95000,0,40432,0
November-10,263697,1,95000,0,40930,0
December-10,266389,0,97000,0,41730,0
January-11,270800,0,97000,0,41811.5,1
February-11,275868,1,97000,0,41893,0
March-11,280935,1,100000,0,42203,0
April-11,286003,0,100000,0,42301.5,1
May-11,290488,1,100000,0,42400,0
June-11,294971,1,99000,0,42457,0
July-11,299455,1,99000,0,41568,1
August-11,303941,0,98000,0,40679,0
September-11,306903,0,98000,0,40670,0
October-11,306903,1,97000,0,40638,0
November-11,306903,0,94000,0,40476,0
December-11,306903,0,91000,0,40313,0
January-12,312680,1,89000,0,40386,0
February-12,318459,1,89000,0,39911,1
March-12,324236,1,89000,0,39436,1
April-12,330014,0,89000,0,38961,0
May-12,336806,0,88000,0,39469,0
June-12,344108,0,88000,0,39146,1
July-12,342378,1,86000,0,38824,1
August-12,340648,1,84000,0,38502,1
September-12,338917,1,68000,0,38179,0
October-12,337187,0,68000,0,36905,0
November-12,337187,1,68000,0,36905,1