Built with blockbuilder.org
forked from tmrickey's block: work graph
forked from tmrickey's block: work graph2
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="regression.min.js"></script>
<style>
body { margin:20px;position:fixed;top:0;right:0;bottom:0;left:0; }
svg {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<svg></svg>
<script>
var sample = "Standard-a",
width = 800,
height = 300,
margin = {top: 20, bottom: 20, left: 20, right: 20};
d3.csv('data.csv', (err, data) => {
// clean the data
var dataArray = [];
data.forEach(d => {
dataArray.push([d.conc, d[sample]])
for (var i in d){
if (d.hasOwnProperty(i)) {
d[i] = Number(d[i]);
}
}
});
var regressionData = regression('polynomial', dataArray, 3);
console.log(regressionData);
// scales
var xExtent = d3.extent(data, d => d.conc);
var xMax = d3.max(data, d => d.conc);
var xScale = d3.scalePow()
.domain([-3, 1])
.range([margin.left, (width/2) - margin.right]);
var yMax = d3.max(data, d => d[sample]);
var yScale = d3.scaleLinear()
.domain([0, 20])
.range([height - margin.bottom, margin.top]);
//Draw the line
var line = d3.line()
.x((d) => { return xScale(d[0]); })
.y((d) => { return yScale(d[1]); });
//.curve(d3.curveBasis);
//Add line to SVG
var svg = d3.select('svg');
svg.append('path')
.attr('d', line(regressionData.points))
.attr('stroke', 'blue')
.attr('fill', 'white');
//Add points
svg.selectAll("dot")
.data(data)
.enter().append("circle")
.attr("r", 5.5)
.attr("cx", function(d) { return xScale(d.conc); })
.attr("cy", function(d) { return yScale(d[sample]); })
.attr('fill', 'blue');;
//Create x and y axis
var xAxis = d3.axisBottom()
.scale(xScale)
.ticks(5)
var yAxis = d3.axisLeft()
.scale(yScale)
.ticks(5);
//Add axes to SVG
svg.append('g')
.attr('transform', 'translate(' + [0, height - margin.bottom] + ')')
.call(xAxis);
svg.append('g')
.attr('transform', 'translate(' + [margin.left, 0] + ')')
.call(yAxis);
});
</script>
</body>
https://d3js.org/d3.v4.min.js