Trying to find the simplest way to make an SVG graph. No features really, just drawing a graph when given some data for x & y axes, with minimal manipulation and code.
A Pen by Ville V. Vanninen on CodePen.
<svg id="example" class="graph" preserveaspectratio="none" width="200" height="100"><path class="line"/></svg> |
function graph (selector, data) { | |
var svg = document.querySelector(selector); | |
var line = svg.querySelector('.line'); | |
var numOfPoints = data.x.length; | |
var xmin = Math.min.apply(null, data.x); | |
var xmax = Math.max.apply(null, data.x); | |
var ymin = Math.min.apply(null, data.y); | |
var ymax = Math.max.apply(null, data.y); | |
var xrange = xmax - xmin; | |
var yrange = ymax - ymin; | |
var path = 'M' + xmin + ',' + ymin + ' '; | |
for (var i = 0; i < numOfPoints; i++) { | |
path += 'L' + data.x[i] + ',' + data.y[i] + ' '; | |
}; | |
path += 'L' + xmax + ',' + ymin + ' '; | |
path += ' Z'; | |
var viewBox = [xmin, ymin, xrange, yrange].join(' '); | |
//transform coordinate system start from bottom left | |
var transform = 'translate(0, '+(ymin*2+yrange)+') scale(1,-1)' | |
svg.setAttribute('viewBox', viewBox); | |
line.setAttribute('d', path); | |
line.setAttribute('transform', transform); | |
} | |
var data = { | |
x: [ | |
9211, | |
9221, | |
9231, | |
9241, | |
9251, | |
9261, | |
9271, | |
9281, | |
9291, | |
], | |
y: [ | |
12.4, | |
11.6, | |
11.4, | |
0, | |
-3, | |
9.1, | |
23.0, | |
10.6, | |
19.4 | |
] | |
} | |
graph('#example', data); |
/*a bit of a reset*/ | |
body, | |
html, | |
.graph { | |
display: block; | |
width: 100%; | |
height: 100%; | |
margin: 0; | |
} | |
/*set a nice color*/ | |
body { | |
color: #666; | |
} | |
/*inherit color*/ | |
.line { | |
fill: currentColor; | |
} |
Trying to find the simplest way to make an SVG graph. No features really, just drawing a graph when given some data for x & y axes, with minimal manipulation and code.
A Pen by Ville V. Vanninen on CodePen.