block by emeeks 8ec13f7ffbbf1d3c4bd8

Ch. 3, Fig. 3 - D3.js in Action

Full Screen

This is the code for Chapter 3, Figure 3 from D3.js in Action which creates buttons that allow you to resize the shapes representing each team to reflect the various attributes in the data.

index.html

<html>
<head>
  <title>D3 in Action Chapter 3 - Example 2</title>
  <meta charset="utf-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
</head>
<style>
  svg {
    height: 500px;
    width: 500px;
    border: 1px solid gray;
  }
  
  text {
font-size: 10px;
}

g > text.active {
font-size: 30px;
}

circle {
fill: pink;
stroke: black;
stroke-width: 1px;
}

circle.active {
fill: red;
}

circle.inactive {
fill: gray;
}

</style>
<body>
<div id="controls"></div>
<div id="viz">
  <svg>
  </svg>
</div>

</body>
  <footer>
    
<script>
  d3.csv("worldcup.csv", function(data) {
    overallTeamViz(data);
  })
  
function overallTeamViz(incomingData) {
d3.select("svg")
.append("g")
.attr("id", "teamsG")
.attr("transform", "translate(50,300)")
.selectAll("g")
.data(incomingData)
.enter()
.append("g")
.attr("class", "overallG")
.attr("transform", function (d,i) {return "translate(" + (i * 50) + ", 0)"});
    
var teamG = d3.selectAll("g.overallG");
    
teamG
.append("circle")
.attr("r", 20)
.style("fill", "pink")
.style("stroke", "black")
.style("stroke-width", "1px");

teamG
.append("text")
.style("text-anchor", "middle")
.attr("y", 30)
.style("font-size", "10px")
.text(function(d) {return d.team});

 var dataKeys = d3.keys(incomingData[0])
.filter(function (el) {return el != "team" && el != "region"})    
   d3.select("#controls").selectAll("button.teams").data(dataKeys).enter().append("button")
   .on("click", buttonClick)
   .html(function(d) {return d});

function buttonClick(datapoint) {
var maxValue = d3.max(incomingData, 
function(d) {return parseFloat(d[datapoint])
});
var radiusScale = d3.scale.linear().domain([0,maxValue]).range([2,20]);
 	d3.selectAll("g.overallG")
.select("circle")
.attr("r", function(d) {return radiusScale(d[datapoint])})
}


  }

</script>
  </footer>

</html>

worldcup.csv

"team","region","win","loss","draw","points","gf","ga","cs","yc","rc"
"Netherlands","UEFA",6,0,1,18,12,6,2,23,1
"Spain","UEFA",6,0,1,18,8,2,5,8,0
"Germany","UEFA",5,0,2,15,16,5,3,10,1
"Argentina","CONMEBOL",4,0,1,12,10,6,2,8,0
"Uruguay","CONMEBOL",3,2,2,11,11,8,3,13,2
"Brazil","CONMEBOL",3,1,1,10,9,4,2,9,2
"Ghana","CAF",2,2,1,8,5,4,1,12,0
"Japan","AFC",2,1,1,7,4,2,2,4,0