block by pstuffa 7b2ca0ea63609a49b7c339fd9b2a6ccf

Running X

Full Screen

Comparison of average BM to total elevtion gain by distance ran

index.html

<!DOCTYPE html>
<meta charset="utf-8">
<style>

body {
  font: 12px sans-serif;
}

h2 {
  font 18px sans-serif;
  font-color: #bfbfbf;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.x.axis path {
  fill:none;
  stroke:#000;
  shape-rendering: crispEdges;
}

.y.axis line {
  stroke: #fff;
  stroke-width: 2;
}

.HRdots {
  fill: red;
  stroke:#000;
  fill-opacity: .25;
}

.Eldots {
  fill: blue;
  stroke:#000;
  fill-opacity: .25;
}

</style>
<body>
<script src="//d3js.org/d3.v3.js"></script>
<script>


var margin = {top: 20, right: 20, bottom: 30, left: 50},
    width = 350 - margin.left - margin.right,
    height = 400 - margin.top - margin.bottom;

var parseDate = d3.time.format("%Y-%m-%d").parse;

var timeScale = d3.time.scale()
    .range([0,width]);

var hrScale = d3.scale.linear()
    .range([height,0])
    .domain([100, 220]);

var elScale = d3.scale.linear()
    .range([height,0]);

var distanceScale = d3.scale.linear()
    .range([0,width]);

var xAxis = d3.svg.axis()
    .scale(distanceScale)
    .orient("bottom");

var hrAxis = d3.svg.axis()
    .innerTickSize(-width)
    .scale(hrScale)
    .orient("left");

var elAxis = d3.svg.axis()
    .innerTickSize(-width)
    .scale(elScale)
    .orient("left");

var left = d3.select("body").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

var right = d3.select("body").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

left.append("rect")
  .attr("width", width)
  .attr("height", height)
  .style("fill", "#bfbfbf")
  .style("fill-opacity", .2);

right.append("rect")
  .attr("width", width)
  .attr("height", height)
  .style("fill", "#bfbfbf")
  .style("fill-opacity", .2);

d3.json("daily-summary.json", function(error, nestedHrData) {

  elScale.domain(d3.extent(nestedHrData, function(d) { return d.value.maxEl; }));
  distanceScale.domain(d3.extent(nestedHrData, function(d) { return d.value.totalDist; }));
  timeScale.domain([parseDate('2015-01-15'), parseDate('2015-08-22')]);

  left.append("g")
    .attr("class", "x axis")
    .attr("transform","translate(0," + height + ")")
    .call(xAxis)

  left.append("g")
    .attr("class", "y axis")
    .call(hrAxis);

  var dots = left.selectAll(".HRdots")
    .data(nestedHrData)
    .enter().append("circle")
    .attr("class", function(d) { return "HRdots t" + d.key; })
    .attr("r", 5)
    .attr("cx", function(d) { return distanceScale(d.value.totalDist); })
    .attr("cy", function(d) { return hrScale(d.value.avgHR); });

  right.append("g")
    .attr("class", "x axis")
    .attr("transform","translate(0," + height + ")")
    .call(xAxis)

  right.append("g")
    .attr("class", "y axis")
    .call(elAxis);

  var dots = right.selectAll(".Eldots")
    .data(nestedHrData)
    .enter().append("circle")
    .attr("class", function(d) { return "Eldots t" + d.key; })
    .attr("r", 5)
    .attr("cx", function(d) { return distanceScale(d.value.totalDist); })
    .attr("cy", function(d) { return elScale(d.value.maxEl); });


d3.selectAll("circle")
  .on("mouseenter", function() {

    var thisClass = d3.select(this).attr("class").split(" ")[1]

    d3.selectAll("." + thisClass)
    .attr("r", 15)

  })
  .on("mouseleave", function() {
    var thisClass = d3.select(this).attr("class").split(" ")[1]
    d3.selectAll("." + thisClass)
    .attr("r", 5)
  })

});

</script>