JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="http://nvd3.org/assets/css/nv.d3.css">
<script src="http://nvd3.org/assets/lib/d3.v3.js"></script>
<script src="http://nvd3.org/assets/js/nv.d3.js"></script>
<div id="chartDisribution">
</div>
JavaScript
var values = [518, 514, 512, 514, 518, 498, 510, 516, 520, 508, 504, 504, 517, 494, 492, 491, 515, 507, 492, 527, 509, 500, 491, 506, 517, 516, 518, 505, 514, 486, 516, 504, 503, 490, 515, 498];
var bins=[450,456,462, 468,474,480,486,492,498,504,510,516,522,528,534,540,546,552,558,564]
var bin_distance = 6;
var num_records = 36;
function mean (arr) {
var sum = 0;
var length = arr.length;
for (var i = 0; i < length; i++) {
sum = sum + arr[i]
}
var mean = sum / length;
return mean;
}
function stdSample(arr) {
return Math.sqrt(variance(arr, 's'));
}
function variance(arr, std_type) {
var sum = 0;
var v = 0;
var arr_length = arr.length;
var this_mean = mean(arr);
if (arr_length > 1) {
for (var i = 0; i < arr_length; i++) {
v = v + (arr[i] - this_mean) * (arr[i] - this_mean);
}
if (std_type == 's') {
return v / (arr_length - 1);
}
else {
return v / arr_length;
}
}
else {
return 0;
}
}
var average = mean(values);
var std = stdSample(values);
var length = bins.length;
var ni1 = 1/(std*Math.sqrt(2*Math.PI));
var norm ="norm data"
for(var i=0;i<length;i++){
var ni2 = Math.exp(-1*((bins[i]-average)*(bins[i]-average))/(2* (std*std)))
var normdata = Math.round(ni1*ni2*bin_distance*num_records);
norm = norm +"<p>"+ bins[i]+" - "+normdata+"</p>"
}
document.getElementById('chartDisribution').innerHTML = norm;