block by micahstubbs 40dcd040189c254755f6

Obesity in the United States - Iteration 3

Full Screen

index.html

<!--
a friendly iteration on sdbernard’s block #248ef0adf01e0e5328d7 
//bl.ocks.org/sdbernard/248ef0adf01e0e5328d7
+ labels shown by default
+ the year radio buttons ordered ascending left to right
+ an extraneous brace removed after the </style> tag
-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Obesity/poverty scatterp</title>
    <script type="text/javascript" src="https://d3js.org/d3.v3.js"></script>
    <style type="text/css">
      body {
        background-color: #fff1e0;
        margin: 0;
        font-family: Arial, sans-serif;
      }
      
      form{
        position: absolute;
        top: 80px;
        left: 582px;
        font-size: 12px;
        color: #74736c;
      }
      circle {
        fill: #bb6d82;
      }

      .barLabel {
        font-size: 10px;
        fill: #74736c;
        pointer-events: none;
      }
      
      .labelsOn{
        opacity: 1;
        transition: opacity 0.3s;
      }
      .labelsOff{
        opacity: 0;
        transition: opacity 0.3s;
      }
      .barValue {
        font-size: 12px;
        fill: #74736c;
      }

      h1, p {
        position: relative;
        left: 10px;
        color: #333333;
        font-weight: normal;
      }

      .hover{
        fill: #9e2f50;
        transition: fill 0.2s;
      }

      .footnote {
        position: relative;

      }

      .source{
        font-size: 11px;
      }
      
      .axis line {
        fill: none;
        stroke: #e9decf;
        stroke-dasharray:2,1;
        shape-rendering: crispEdges;
      }
      
      .axis text {
        font-family: Arial,sans-serif;
        font-size: 11px;
        fill: #74736c;
      }
      
      .x.axis path,
      .y.axis path{
        opacity: 0;
      }

      .toolTip{
        padding: 6px;
        background-color: #fff;
        border-radius: 4px;
        position: absolute;
        font-size: 12px;
        line-height: 18px;
        visibility: hidden;
      }
      .stateName{
        font-weight: bold;
        font-size: 14px;
        /*margin-bottom: -8px;
        display: block;*/
      }
      .dataNum{
        font-weight: bold;
      }
      .subhead{
        fill: #74736c;
        font-size: 14px;
      }
    
    #cbLabel{
      margin-right: 20px;
    }
     
    label{
        margin-right: 12px;
    }

    </style>
  </head>
  <body>
    <div class="toolTip"></div>
    <form>
      <input type="checkbox" class="myCB" name="vehicle" value="states" checked="true"/>
      <label id="cbLabel" for="states">Show state labels</label>
      <input type="radio" class="myRB" name="vehicle" value="2005" checked="true"/>
      <label for="2005">2005</label>
      <input type="radio" class="myRB" name="vehicle" value="2010"/>
      <label for="2010">2010</label>
      <input type="radio" class="myRB" name="vehicle" value="2013"/>
      <label for="2013">2013</label>
    </form>
 
    <script type="text/javascript">   
      var  margin = {top: 10, right: 10, bottom: 35, left: 50};
      var w = 900,
          h = 760,
          tt,
          rbYr = 2013;

      var body = d3.select('body');

      body.append('h1')
        .text('Obesity in the United States')


      var svg = d3.select('body').append('svg'),
          barHeight = 10,
          circlespace = 5
         
      svg.append('text')
        .text('% of Americans in poverty, by state (2013)')
        .attr('transform', function(d) {
          return "rotate(-90 0, 360)"
        })
        .attr('x', 0)
        .attr('y', h/2)
        .attr('text-anchor', 'middle')
        .attr('class', 'y subhead')
        .attr('opacity', 0)

      svg.append('text')
        .text('% of Americans classified as obese, by state (2013)')
        .attr('x', w/2)
        .attr('y', h -3 )
        .attr('text-anchor', 'middle')
        .attr('class', 'x subhead')
        .attr('opacity', 0)
      
      svg.attr('width', w)
          .attr('height', h)
      
      var xScale = d3.scale.linear()
              .range([ margin.left, w - margin.left - margin.right ]);
    
      var yScale = d3.scale.linear()
                .range([0, h - margin.bottom ]);

      var xAxis = d3.svg.axis()
              .scale(xScale)
              .tickSize(-(h-margin.top - margin.bottom))
              .ticks(12)
              .orient('bottom');
      var yAxis = d3.svg.axis()
              .scale(yScale)
              .tickSize(-w-margin.left - margin.right)
              .ticks(15)
              .orient('left');
     
      //Load in contents of CSV file
      d3.csv('obesityPoverty.csv', function(data) {
        console.log(data);

        data.sort(function(a,b) {
          return d3.descending(a.obesity2005, b.obesity2005)
        });

        xScale.domain([
          d3.min(data, function(d) {
          return +d.obesity2005 -1;
        }), d3.max(data, function(d) {
          return +d.obesity2013 +1;
        }) ]);

        yScale.domain([
          d3.max(data, function(d) {
            return +d.poverty2013 +1;
          }),
          d3.min(data, function(d) {
            return +d.poverty2005 -1;
          })
        ]);



        svg.append('g')
          .attr('class', 'x axis')
          .attr('transform', 'translate(' + -w + ',' +  (h - margin.bottom) + ')')
          .call(xAxis);
        
        svg.append('g')
          .attr('class', 'y axis')
          .attr('transform', 'translate(' + margin.left + ',' + -w +')')
          .call(yAxis);

        d3.select('.y.axis')
          .transition()
          .delay(1000)
          .duration(800)
          .ease('quad')
          .attr('transform', 'translate(' + margin.left + ',0)')

        d3.select('.x.axis')
          .transition()
          .duration(800)
          .ease('quad')
          .attr('transform', 'translate(0,' +  (h - margin.bottom) + ')')

        d3.select('.x.subhead')
          .transition()
          .delay(800)
          .attr('opacity', 1)

        d3.select('.y.subhead')
          .transition()
          .delay(1800)
          .attr('opacity', 1)

        var circleGroups = svg.selectAll('.circleGroup')
                    .data(data)
                    .enter()
                    .append('g')
                    .attr({
                      'class': 'circleGroup'
                    })

       

 var circles = circleGroups.append('circle')
            .attr({
            'r': 5,
            'cx':margin.left,
            'cy':h- margin.bottom,
            'opacity': 0
          })
        circles.transition().delay(function (d,i){ return 2000 + (i * 30);}).ease('quad').duration(500)
          .attr({
            'cx': function(d) { return xScale(d.obesity2005); },
            'cy': function(d) { return yScale(d.poverty2005); },
            'opacity': 0.7
            })

        circleGroups.append('text')
          .text(function(d) { return d.state; })
          .attr({
            'class': 'barLabel',
            'dx': 4,
            'dy': -4,
            'x': function(d) { return xScale(d.obesity2005); },
            'y': function(d) { return yScale(d.poverty2005); },
            'opacity': 0,
          })

        circles.style('cursor', 'pointer')
        
        circles.on('mouseover', function(d) { 
          d3.select(this)
            .classed('hover', true)
            .transition()
            .attr('r', 10)
          
        tt = d3.select('.toolTip');
          tt.html('<span class="stateName">' + d.state + '</span><br/>' + 'Obesity ' + rbYr + ': <span class="dataNum">' + d.obesity2013 + '</span>%<br/>Poverty ' + rbYr + ': <span class="dataNum">' + d.poverty2013 + '</span>%')
            .style('top', d3.event.pageY - 12 + 'px')
            .style('visibility', 'visible')
         })

         circles.on('mouseout', function() { 
          d3.select(this)
            .classed('hover', false)
            .transition()
            .attr('r', 5)
          tt.style('visibility', 'hidden')
         })

         circleGroups.on('mousemove', function (d) {


          var toolW = d3.select('.toolTip').node().getBoundingClientRect().width;

          if(d3.event.pageX > (w - toolW)) {
            tt.style('left', d3.event.pageX - toolW - 12 + 'px')
          } else {
            tt.style('left', d3.event.pageX + 12 + 'px')
          }
        })


        body.append('p')
          .text('Source: Centers for Disease Control and Prevention')
          .attr('class', 'source')

        body.append('p')
          .text('Hover over the circles!!!')
          .attr('class', 'footnote')

         d3.selectAll('.myRB').on('click', function() {
            rbYr = this.value;
            circles.transition().ease('quad').duration(500)
              .attr({
                'cx': function(d) { return xScale(d['obesity' + [rbYr]]); },
                'cy': function(d) { return yScale(d['poverty' + [rbYr]]); }
                }) 

            d3.selectAll('.barLabel').transition().ease('quad').duration(500)
              .attr({
                'x': function(d) { return xScale(d['obesity' + [rbYr]]); },
                'y': function(d) { return yScale(d['poverty' + [rbYr]]); }
                })  
        })
        d3.select('.myCB').on('click', function() {
          if (this.checked) {
            d3.selectAll('.barLabel')
              .classed('labelsOn', true)
              .classed('labelsOff', false)
          }
          else {
             d3.selectAll('.barLabel')
              .classed('labelsOff', true)
              .classed('labelsOn', false)
          }
        });

        d3.selectAll('.barLabel')
          .classed('labelsOn', true)
          .classed('labelsOff', false)


      });
    </script>
 
  </body>
</html>

obesityPoverty.csv

state,obesity2013,obesity2012,obesity2011,obesity2010,obesity2009,obesity2008,obesity2007,obesity2006,obesity2005,poverty2013,poverty2012,poverty2011,poverty2010,poverty2009,poverty2008,poverty2007,poverty2006,poverty2005
Alabama,32.4,33,32,33,31.6,32.2,30.9,30.5,28.9,16.7,16.2,15.4,17.2,16.6,14.3,14.5,14.3,16.7
Alaska,28.4,25.7,27.4,25.2,25.4,27.1,28.2,26.2,27.4,10.9,10.0,11.7,12.5,11.7,8.2,7.6,8.9,10.0
Arizona,26.8,26,25.1,25.2,25.9,25.6,25.8,22.9,21.1,20.2,19.0,17.2,18.8,21.2,18.0,14.3,14.4,15.2
Arkansas,34.6,34.5,30.9,30.9,31.5,29.5,29.3,26.9,28,17.1,20.1,18.7,15.3,18.9,15.3,13.8,17.7,13.8
California,24.1,25,23.8,24.7,25.5,24.3,23.3,23.3,22.7,14.9,15.9,16.9,16.3,15.3,14.6,12.7,12.2,13.2
Colorado,21.3,20.5,20.7,21.4,19,19.1,19.3,18.2,17.8,10.6,11.9,13.2,12.3,12.3,11.0,9.8,9.7,11.4
Connecticut,25,25.6,24.5,23,21,21.4,21.7,20.6,20.1,11.3,10.3,10.1,8.6,8.4,8.1,8.9,8.0,9.3
Delaware,31.1,26.9,28.8,28.7,27.6,27.8,28.2,26,23.5,14.0,13.5,13.7,12.2,12.3,9.6,9.3,9.3,9.2
District of Columbia,22.9,21.9,23.8,22.4,20.1,22.3,22.2,22.5,21.7,21.3,18.4,19.9,19.5,17.9,16.5,18.0,18.3,21.3
Florida,26.4,25.2,26.6,27.2,26.5,25.2,24.1,23.1,22.8,14.9,15.3,14.9,16.0,14.6,13.1,12.5,11.5,11.1
Georgia,30.3,29.1,28,30.4,27.7,27.8,28.7,27.1,26.5,16.3,18.1,18.4,18.8,18.4,15.5,13.6,12.6,14.4
Hawaii,21.8,23.6,21.9,23.1,22.9,23.1,21.7,20.6,19.7,11.1,13.8,12.1,12.4,12.5,9.9,7.5,9.2,8.6
Idaho,29.6,26.8,27.1,26.9,25.1,25.2,25.1,24.1,24.5,12.9,14.4,15.7,13.8,13.7,12.2,9.9,9.5,9.9
Illinois,29.4,28.1,27.1,28.7,27.4,26.9,25.6,25.1,25.1,13.3,12.6,14.2,14.1,13.2,12.3,10.0,10.6,11.5
Indiana,31.8,31.4,30.8,30.2,30,27,27.4,27.8,27.2,11.6,15.2,15.6,16.3,16.1,14.3,11.8,10.6,12.6
Iowa,31.3,30.4,29,29.1,28.5,26.7,27.7,25.7,25.4,10.8,10.3,10.4,10.3,10.7,9.5,8.9,10.3,11.3
Kansas,30,29.9,29.6,30.1,28.8,28.1,27.7,25.9,23.9,13.2,14.0,14.3,14.5,13.7,12.7,11.7,12.8,12.5
Kentucky,33.2,31.3,30.4,31.8,32.4,30.3,28.7,28,28.6,20.0,17.9,16.0,17.7,17.0,17.1,15.5,16.8,14.8
Louisiana,33.1,34.7,33.4,31.7,33.9,29,30.7,27.1,30.8,19.2,21.1,21.1,21.5,14.3,18.2,16.1,17.0,18.3
Maine,28.9,28.4,27.8,27.4,26.4,25.9,25.2,23.1,22.7,12.3,12.8,13.4,12.6,11.4,12.0,10.9,10.2,12.6
Maryland,28.3,27.6,28.3,27.9,26.8,26.7,26.3,24.9,24.4,10.3,9.9,9.3,10.9,9.6,8.7,8.8,8.4,9.7
Massachusetts,23.6,22.9,22.7,23.6,21.8,21.5,21.7,20.3,20.7,11.9,11.3,10.6,10.9,10.8,11.3,11.2,12.0,10.1
Michigan,31.5,31.1,31.3,31.7,30.3,29.5,28.2,28.8,26.2,14.5,13.7,15.0,15.7,14.0,13.0,10.8,13.3,12.0
Minnesota,25.5,25.7,25.7,25.4,25.4,25.2,26,24.7,23.7,12.0,10.0,10.0,10.8,11.1,9.9,9.3,8.2,8.1
Mississippi,35.1,34.6,34.9,34.5,35.4,33.4,32.6,31.4,30.9,22.5,22.0,17.4,22.5,23.1,18.1,22.6,20.6,20.1
Missouri,30.4,29.6,30.3,31.4,30.6,29.1,28.2,27.2,26.9,13.7,15.2,15.4,15.0,15.5,13.3,12.8,11.4,11.6
Montana,24.6,24.3,24.6,23.5,23.7,24.3,22.6,21.2,21.3,14.5,13.4,16.5,14.5,13.5,12.9,13.0,13.5,13.8
Nebraska,29.6,28.6,28.4,27.5,28.1,27.2,26.5,26.9,26,11.0,12.2,10.2,10.2,9.9,10.6,9.9,10.2,9.5
Nevada,26.2,26.2,24.5,23.1,26.4,25.6,24.6,25,21.2,17.4,15.8,15.5,16.6,13.0,10.8,9.7,9.5,10.6
New Hampshire,26.7,27.3,26.2,25.5,26.3,24.9,25.1,22.4,23.1,9.0,8.1,7.6,6.5,7.8,7.0,5.8,5.4,5.6
New Jersey,26.3,24.6,23.7,24.8,23.9,23.6,24.1,22.6,22.1,11.1,9.3,11.4,11.1,9.3,9.2,8.7,8.8,6.8
New Mexico,26.4,27.1,26.3,25.6,25.6,25.7,25.1,22.9,21.7,21.7,20.4,22.2,18.3,19.3,19.3,14.0,16.9,17.9
New York,25.4,23.6,24.5,24.5,24.6,25.1,25.5,22.9,22.2,14.5,17.2,16.0,16.0,15.8,14.2,14.5,14.0,14.5
North Carolina,29.4,29.6,29.1,28.6,30.1,29.5,28.7,26.6,25.9,18.6,17.2,15.4,17.4,16.9,13.9,15.5,13.8,13.1
North Dakota,31,29.7,27.8,27.9,28.4,27.8,27,25.4,25.4,9.9,11.4,9.9,12.6,10.9,11.8,9.3,11.4,11.2
Ohio,30.4,30.1,29.7,29.7,29.8,29.3,28.1,28.4,24.3,13.7,15.4,15.1,15.4,13.3,13.7,12.8,12.1,12.3
Oklahoma,32.5,32.2,31.1,31.3,32,31,28.8,28.8,26.8,14.0,18.0,13.9,16.3,12.9,13.6,13.4,15.2,15.6
Oregon,26.5,27.3,26.7,27.6,23.6,25,26.3,24.8,23.8,15.1,13.5,14.4,14.3,13.4,10.6,12.8,11.8,12.0
Pennsylvania,30,29.1,28.6,29.2,28.1,28.4,27.8,24,25.3,12.4,13.9,12.6,12.2,11.1,11.0,10.4,11.3,11.2
Rhode Island,27.3,25.7,25.4,26,24.9,22.1,21.7,21.4,21,13.5,13.6,13.4,14.0,13.0,12.7,9.5,10.5,12.1
South Carolina,31.7,31.6,30.8,32,30.1,30.7,29,29.4,29.1,15.9,16.7,19.0,16.9,13.7,14.0,14.1,11.2,15.0
South Dakota,29.9,28.1,28.1,27.7,30.3,28.1,27.2,25.4,25.5,10.3,12.8,14.5,13.6,14.1,13.1,9.4,10.7,11.8
Tennessee,33.7,31.1,29.2,31.7,32.9,31.2,30.7,28.8,27.4,18.1,18.6,16.3,16.7,16.5,15.0,14.8,14.9,14.9
Texas,30.9,29.2,30.4,31.7,29.5,28.9,28.6,26.1,27,16.8,17.0,17.4,18.4,17.3,15.9,16.5,16.4,16.2
Utah,24.1,24.3,24.4,23,24,23.1,22.4,21.9,21.2,8.3,11.0,11.0,10.0,9.7,7.6,9.6,9.3,9.2
Vermont,24.7,23.7,25.4,23.9,23.4,23.3,21.9,21.2,20.2,8.7,11.2,11.6,10.8,9.4,9.0,9.9,7.8,7.6
Virginia,27.2,27.4,29.2,26.4,25.5,25.8,25.3,25.1,25.1,10.4,10.6,11.4,10.7,10.7,10.3,8.6,8.6,9.2
Washington,27.2,26.8,26.5,26.2,26.9,26,25.9,24.2,23.3,12.0,11.6,12.5,11.6,11.7,10.4,10.2,8.0,10.2
West Virginia,35.1,33.8,32.4,32.9,31.7,31.9,30.3,31,30.6,17.3,16.7,17.5,16.8,15.8,14.5,14.8,15.3,15.4
Wisconsin,29.8,29.7,27.7,26.9,29.2,26.1,25.3,26.6,24.4,11.0,11.4,13.1,10.1,10.8,9.8,11.0,10.1,10.2
Wyoming,27.8,24.6,25,25.7,25.4,25.2,24.5,23.3,24.2,11.8,9.6,10.7,9.6,9.2,10.1,10.9,10.0,10.6