Skip to content

Instantly share code, notes, and snippets.

@vikkya
Created December 18, 2020 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vikkya/d6c7ffad9c67e08f7730bf29b1c0e3d4 to your computer and use it in GitHub Desktop.
Save vikkya/d6c7ffad9c67e08f7730bf29b1c0e3d4 to your computer and use it in GitHub Desktop.
multiline chart
license: mit
<!DOCTYPE html>
<meta charset="utf-8">
<style> /* set the CSS */
body { font: 12px Arial;}
path {
stroke: steelblue;
stroke-width: 2;
fill: none;
}
.axis path,
.axis line {
fill: none;
stroke: grey;
stroke-width: 1;
shape-rendering: crispEdges;
}
.legend {
font-size: 16px;
font-weight: bold;
text-anchor: middle;
}
</style>
<body>
<!-- load the d3.js library -->
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
// Set the dimensions of the canvas / graph
var margin = {top: 30, right: 20, bottom: 70, left: 50},
width = 600 - margin.left - margin.right,
height = 300 - margin.top - margin.bottom;
// Set the ranges
var x = d3.scaleLinear().range([0, width]);
var y = d3.scaleLinear().range([height, 0]);
// Define the line
var line = d3.line()
.x(function(d) { return x(d.month); })
.y(function(d) { return y(d.sales); });
// Adds the svg canvas
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 + ")");
// Get the data
d3.csv("stockes.csv", function(error, data) {
data.forEach(function(d) {
d.month = +d.month;
d.sales = +d.sales;
});
// Scale the range of the data
x.domain([1, d3.max(data, function(d) { return d.month; })]).nice();
y.domain([0, d3.max(data, function(d) { return d.sales; })]).nice();
// Add the X Axis
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
// Add the Y Axis
svg.append("g")
.attr("class", "axis")
.call(d3.axisLeft(y));
// Nest the entries by series
var dataNest = d3.nest()
.key(function(d) {return d.series;})
.entries(data);
// set the colour scale
var color = d3.scaleOrdinal(d3.schemeCategory10);
legendSpace = width/dataNest.length; // spacing for the legend
// Loop through each series / key
dataNest.forEach(function(d,i) {
svg.append("path")
.attr("class", "line")
.style("stroke", function() { // Add the colours dynamically
return d.color = color(d.key); })
.attr("d", line(d.values));
});
});
</script>
</body>
series month sales
series1 1 24.31
series1 2 32.34
series1 3 21.76
series1 4 20.87
series1 5 20.09
series1 6 30.93
series1 7 32.56
series1 8 36.65
series1 9 42.69
series1 10 39.45
series1 11 44.1
series1 12 44.46
series2 1 21.85
series2 2 22.01
series2 3 26.03
series2 4 28.69
series2 5 35.89
series2 6 36.32
series2 7 41.64
series2 8 46.32
series2 9 48.43
series2 10 54.43
series2 11 53.97
series2 12 59.62
series3 1 71.22
series3 2 71.13
series3 3 71.57
series3 4 77.47
series3 5 80.48
series3 6 75.42
series3 7 74.28
series3 8 75.12
series3 9 80.91
series3 10 81.96
series3 11 83.08
series3 12 85.05
series4 1 7.18
series4 2 8.51
series4 3 9.07
series4 4 11.11
series4 5 15.98
series4 6 14.53
series4 7 16.54
series4 8 18.31
series4 9 22.36
series4 10 20.44
series4 11 34.45
series4 12 38.69
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment