Built with blockbuilder.org
Last active
May 31, 2018 14:30
-
-
Save thestrabusiness/636c9727a322ef56ec3371eaa1ae10d7 to your computer and use it in GitHub Desktop.
fresh block
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
license: mit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<head> | |
<meta charset="utf-8"> | |
<script src="https://d3js.org/d3.v4.min.js"></script> | |
<style> | |
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; } | |
.domain { display: none } | |
circle.morning { stroke: #70c3d0; fill: #70c3d0} | |
circle.evening { stroke: #316ba7; fill: #316ba7 } | |
circle.red { stroke: #d0021b; fill: #d0021b} | |
.vertical-line { fill: none; stroke: #70c3d0; stroke-width: 5;} | |
.vertical-line.evening { fill: none; stroke: #316ba7; stroke-width: 5;} | |
.tick line { stroke: #C0C0BB; } | |
.tick text { fill: #8E8883; font-size: 14pt; font-family: sans-serif; } | |
.axis-label { fill: #635F5D; font-size: 14pt; font-family: sans-serif; } | |
</style> | |
</head> | |
<body> | |
<script> | |
var margin = {top: 120, right: 100, bottom: 50, left: 150}; | |
var width = 960 - margin.left - margin.right, | |
height = 500 - margin.top - margin.bottom; | |
var data = { | |
"reading_type": 'blood-sugar-reading', | |
"discharge_date": "2018-05-24 13:26:08 UTC", | |
"morning": [ | |
{"systolic":125,"diastolic":79,"date":0, "alert": false}, | |
{"systolic":123,"diastolic":82,"date":1, "alert": false}, | |
{"systolic":133,"diastolic":79,"date":2, "alert": false}, | |
{"systolic":140,"diastolic":100,"date":3, "alert": true}, | |
{"systolic":125,"diastolic":81,"date":4, "alert": false}, | |
{"systolic":130,"diastolic":82,"date":5, "alert": false}, | |
{"systolic":117,"diastolic":82,"date":6, "alert": false}, | |
{"systolic":132,"diastolic":87,"date":7, "alert": false}, | |
{"systolic":111,"diastolic":76,"date":8, "alert": false}, | |
{"systolic":123,"diastolic":86,"date":9, "alert": false}, | |
{"systolic":125,"diastolic":84,"date":10, "alert": false}, | |
{"systolic":121,"diastolic":74,"date":11, "alert": false}, | |
{"systolic":117,"diastolic":82,"date":15, "alert": false}, | |
{"systolic":101,"diastolic":80,"date":16, "alert": false}, | |
{"systolic":106,"diastolic":88,"date":19, "alert": false}, | |
{"systolic":122,"diastolic":87,"date":22, "alert": false}, | |
{"systolic":123,"diastolic":86,"date":23, "alert": false}, | |
{"systolic":151,"diastolic":81,"date":12, "alert": true}, | |
{"systolic":125,"diastolic":80,"date":25, "alert": false}, | |
{"systolic":142,"diastolic":76,"date":13, "alert": true}, | |
{"systolic":132,"diastolic":72,"date":27, "alert": false}, | |
{"systolic":133,"diastolic":88,"date":17, "alert": false}, | |
{"systolic":133,"diastolic":82,"date":14, "alert": false} | |
], | |
"evening": [ | |
{"systolic":115,"diastolic":74,"date":0, "alert": false}, | |
{"systolic":113,"diastolic":80,"date":1, "alert": false}, | |
{"systolic":123,"diastolic":73,"date":2, "alert": false}, | |
{"systolic":130,"diastolic":90,"date":3, "alert": false}, | |
{"systolic":115,"diastolic":80,"date":4, "alert": false}, | |
{"systolic":120,"diastolic":82,"date":5, "alert": false}, | |
{"systolic":107,"diastolic":83,"date":6, "alert": false}, | |
{"systolic":122,"diastolic":86,"date":7, "alert": false}, | |
{"systolic":110,"diastolic":73,"date":8, "alert": false}, | |
{"systolic":113,"diastolic":81,"date":9, "alert": false}, | |
{"systolic":115,"diastolic":79,"date":10, "alert": false}, | |
{"systolic":111,"diastolic":74,"date":11, "alert": false}, | |
{"systolic":107,"diastolic":78,"date":15, "alert": false}, | |
{"systolic":111,"diastolic":74,"date":16, "alert": false}, | |
{"systolic":116,"diastolic":72,"date":19, "alert": false}, | |
{"systolic":102,"diastolic":80,"date":22, "alert": false}, | |
{"systolic":103,"diastolic":75,"date":23, "alert": false}, | |
{"systolic":101,"diastolic":73,"date":12, "alert": false}, | |
{"systolic":115,"diastolic":72,"date":25, "alert": false}, | |
{"systolic":122,"diastolic":71,"date":13, "alert": false}, | |
{"systolic":122,"diastolic":70,"date":27, "alert": false}, | |
{"systolic":123,"diastolic":80,"date":17, "alert": false}, | |
{"systolic":140,"diastolic":100,"date":14, "alert": true} | |
] | |
}; | |
var lineGenerator = d3.line(); | |
var morningData = data.morning; | |
var eveningData = data.evening; | |
var series = []; | |
morningData.map(function(reading){ | |
series.push( {x: reading.date, y: reading.systolic}); | |
series.push( {x: reading.date, y: reading.diastolic}) | |
}); | |
eveningData.map(function(reading){ | |
series.push( {x: reading.date, y: reading.systolic}); | |
series.push( {x: reading.date, y: reading.diastolic}) | |
}); | |
var verticalLinePath = function(d) { | |
return lineGenerator( | |
[[x(d.date), y(d.diastolic)], [x(d.date) ,y(d.systolic)]] | |
); | |
}; | |
var offsetVerticalPath = function(d) { | |
return lineGenerator( | |
[[x(d.date+.33), y(d.diastolic)], [x(d.date+.33) ,y(d.systolic)]] | |
); | |
} | |
var y = d3.scaleLinear() | |
.range([0, height]); | |
var x = d3.scaleLinear() | |
.range([0, width]); | |
var min_y = d3.min(series, function(d) {return d.y}); | |
var max_y = d3.max(series, function(d) {return d.y}); | |
y.domain([max_y +10 , min_y - 10]); | |
x.domain([0, d3.max(series, function(d) { return d.x })]); | |
// x.nice(); | |
var svg = d3.select("body").append("svg") | |
.attr("width", 960) | |
.attr("height", 500) | |
const g = svg.append('g') | |
.attr('transform',`translate(${margin.left},${margin.top})`); | |
const xAxisG = g.append('g') | |
.attr('transform', `translate(0, ${height})`); | |
const yAxisG = g.append('g'); | |
const xAxis = d3.axisBottom(x); | |
const yTicks = 10; | |
const yAxis = d3.axisLeft(y) | |
.ticks(yTicks) | |
.tickPadding(20) | |
.tickSize(-width); | |
//Define area containing all readings | |
readingsGroup = svg.append("g").attr("class", "readings"); | |
//Plot morning data | |
morningReadings = readingsGroup.selectAll(".readings") | |
.data(data.morning) | |
.enter().append("g") | |
.attr("class", "reading") | |
.attr('transform',`translate(${margin.left},${margin.top})`);; | |
morningReadings.append("path") | |
.attr("class", "vertical-line") | |
.attr("d", verticalLinePath) | |
.attr(); | |
morningSystolic = morningReadings.append("circle") | |
.attr('class', function(d) { | |
if (d.alert) { return "red" } | |
else { return "morning"} | |
}) | |
.attr("r", 5) | |
.attr("cx", function(d) { | |
return x(d.date); | |
}) | |
.attr("cy", function(d){return y(d.systolic)}); | |
morningDiastolic = morningReadings.append("circle") | |
.attr("class", "morning") | |
.attr('class', function(d) { | |
if (d.alert) { return "red" } | |
else { return "morning"} | |
}) | |
.attr("r", 5) | |
.attr("cx", function(d) { | |
return x(d.date); | |
}) | |
.attr("cy", function(d){return y(d.diastolic)}); | |
//Plot evening data, offset x-value so it doesn't overlap with morning | |
eveningReadings = readingsGroup.selectAll(".readings") | |
.data(data.evening) | |
.enter().append("g") | |
.attr("class", "reading") | |
.attr('transform',`translate(${margin.left},${margin.top})`);; | |
eveningReadings.append("path") | |
.attr("class", "vertical-line evening") | |
.attr("d", offsetVerticalPath) | |
.attr(); | |
eveningSystolic = eveningReadings.append("circle") | |
.attr("class", "evening") | |
.attr('class', function(d) { | |
if (d.alert) { return "red" } | |
else { return "evening"} | |
}) | |
.attr("r", 5) | |
.attr("cx", function(d) { | |
return x(d.date + 0.33); | |
}) | |
.attr("cy", function(d){return y(d.systolic)}); | |
eveningDiastolic = eveningReadings.append("circle") | |
.attr("class", "evening") | |
.attr('class', function(d) { | |
if (d.alert) { return "red" } | |
else { return "evening"} | |
}) | |
.attr("r", 5) | |
.attr("cx", function(d) { | |
return x(d.date + 0.33); | |
}) | |
.attr("cy", function(d){return y(d.diastolic)}); | |
xAxisG.call(xAxis); | |
yAxisG.call(yAxis); | |
</script> | |
</body> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment