Comparison of average BM to total elevtion gain by distance ran
xxxxxxxxxx
<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="https://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>
Modified http://d3js.org/d3.v3.js to a secure url
https://d3js.org/d3.v3.js