Skip to content

Instantly share code, notes, and snippets.

@antimatter15
Forked from mbostock/.block
Last active December 13, 2015 23:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save antimatter15/4992633 to your computer and use it in GitHub Desktop.
Save antimatter15/4992633 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
font: 10px sans-serif;
}
.bar rect {
opacity: 0.5;
shape-rendering: crispEdges;
}
.bar text {
fill: #fff;
}
.axis path, .axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.fit {
fill: none;
stroke-width: 4px;
opacity: 0.5;
}
</style>
<body>
<script src="http://d3js.org/d3.v2.min.js?2.10.0"></script>
<script>
// Generate an Irwin–Hall distribution of 10 random variables.
var values = [{"age":12,"blindness":"No","email":"asdfasd","id":"5124561e543c953d690001da","name":"asdfsdfsd","perception":"No","survey_taken":false,"synesthesia":"No","test_taken":false,"tests":[]},{"age":129,"blindness":"No","email":"lasdkjfass","id":"51243cd8543c952efb00000f","name":"hello","perception":"No","survey_taken":false,"synesthesia":"No","test_taken":false,"tests":[]},{"age":123,"blindness":"No","email":"asdfsdf","id":"512454af543c953d690001b5","name":"asdfsdf","perception":"No","survey_taken":false,"synesthesia":"No","test_taken":true,"tests":[{"attempts":1,"display_word":"Green","id":"512455a2543c953d690001c2","question_num":1,"response_time":2313,"text_color":"black"},{"attempts":1,"display_word":"Red","id":"512455a2543c953d690001c3","question_num":2,"response_time":811,"text_color":"black"},{"attempts":1,"display_word":"Purple","id":"512455a2543c953d690001c4","question_num":3,"response_time":941,"text_color":"black"},{"attempts":1,"display_word":"Brown","id":"512455a2543c953d690001c5","question_num":4,"response_time":956,"text_color":"black"},{"attempts":1,"display_word":"Brown","id":"512455a2543c953d690001c6","question_num":5,"response_time":1611,"text_color":"Purple"},{"attempts":1,"display_word":"Red","id":"512455a2543c953d690001c7","question_num":6,"response_time":1147,"text_color":"Red"},{"attempts":1,"display_word":"Purple","id":"512455a2543c953d690001c8","question_num":7,"response_time":1612,"text_color":"Green"},{"attempts":3,"display_word":"Purple","id":"512455a2543c953d690001c9","question_num":8,"response_time":2063,"text_color":"Brown"},{"attempts":1,"display_word":"Green","id":"512455a2543c953d690001ca","question_num":9,"response_time":1370,"text_color":"Purple"},{"attempts":1,"display_word":"Brown","id":"512455a2543c953d690001cb","question_num":10,"response_time":1478,"text_color":"Brown"},{"attempts":1,"display_word":"Purple","id":"512455a2543c953d690001cc","question_num":11,"response_time":1417,"text_color":"Purple"}]}];
// A formatter for counts.
var formatCount = d3.format(",.0f");
var margin = {top: 10, right: 30, bottom: 30, left: 30},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var x = d3.scale.linear()
.domain([0, 4000])
.range([0, width]);
var real_tests = d3.merge(values.map(function(e){return e.tests}));
var parts = [real_tests.filter(function(t){
return t.text_color == "black"
}).map(function(e){return e.response_time}),
real_tests.filter(function(t){
return t.text_color != "black"
}).map(function(e){return e.response_time})]
// var parts = [d3.range(50).map(d3.random.normal(2500, 400)), d3.range(50).map(d3.random.normal(1900, 200))]
var hist = parts.map(function(e){
return d3.layout.histogram()
.bins(x.ticks(40))(e)
})
var ymax = d3.max(hist.map(function(e){
return d3.max(e, function(d){return d.y})
}));
var y = d3.scale.linear()
.domain([0, ymax])
.range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
// .tickFormat(d3.format(',.0f ms'))
.orient("bottom");
var svg = 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 colors = ["steelblue", "green"]
var histogram = svg.selectAll(".histogram")
.data(hist)
.enter().append("g")
.attr("fill", function(d, i){ return colors[i]} )
.attr("class", "histogram")
var line = d3.svg.line()
.x(function(d, i) { return x(d[0]); })
.y(function(d, i) { return y(d[1]); });
var norm_max = d3.max(parts, function(d){
var mean = d3.mean(d), stdev = Math.sqrt(d3.mean(d.map(function(e){return Math.pow(e - mean, 2)})));
var max = 1 / (Math.sqrt(2 * Math.PI) * stdev);
return max
})
var curve = svg.selectAll(".fit")
.data(parts)
.enter().append("g")
.attr("class", "fit")
.attr("stroke", function(d, i){ return colors[i]} )
curve.append('svg:path')
.attr("d", function(d){
return line(d3.range(0, 4000, 10).map(function(x){
var mean = d3.mean(d), stdev = Math.sqrt(d3.mean(d.map(function(e){return Math.pow(e - mean, 2)})));
// var max = 1 / (Math.sqrt(2 * Math.PI) * stdev);
var pct_mean = ((1 / ( stdev * Math.sqrt( 2 * Math.PI ))) * Math.exp( - Math.pow(x - mean, 2) / (2 * stdev * stdev))) / norm_max
return [x, pct_mean * ymax]
}))
})
var bar = histogram.selectAll(".bar")
.data(function(d){ return d })
.enter().append("g")
.attr("class", "bar")
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; });
bar.append("rect")
.attr("x", 1)
.attr("width", x(hist[0][0].dx) - 1)
.attr("height", function(d) { return height - y(d.y); })
// bar.append("text")
// .attr("dy", ".75em")
// .attr("y", 6)
// .attr("x", x(hist[0][0].dx) / 2)
// .attr("text-anchor", "middle")
// .text(function(d) { return formatCount(d.y); });
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment