first commit

This commit is contained in:
dev-chiefworks
2022-05-31 16:21:53 -04:00
commit f76abffdcd
5978 changed files with 1078901 additions and 0 deletions
+252
View File
@@ -0,0 +1,252 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - difference line chart
*
* Demo d3.js difference line chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
difference('#d3-difference', 400);
// Chart setup
function difference(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 10, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%Y%m%d").parse;
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(6);
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.area()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d["New York"]); });
// Area
var area = d3.svg.area()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y1(function(d) { return y(d["New York"]); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_difference.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
d["New York"]= +d["New York"];
d["San Francisco"] = +d["San Francisco"];
});
// Bind data
svg.datum(data);
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
// Vertical
y.domain([
d3.min(data, function(d) { return Math.min(d["New York"], d["San Francisco"]); }),
d3.max(data, function(d) { return Math.max(d["New York"], d["San Francisco"]); })
]);
//
// Append chart elements
//
// Add masks
// ------------------------------
svg.append("clipPath")
.attr("id", "clip-below")
.append("path")
.attr("d", area.y0(height));
svg.append("clipPath")
.attr("id", "clip-above")
.append("path")
.attr("d", area.y0(0));
svg.append("path")
.attr("class", "area mask-above")
.attr("clip-path", "url(#clip-above)")
.attr("fill", "#FF8A65")
.attr("d", area.y0(function(d) { return y(d["San Francisco"]); }));
svg.append("path")
.attr("class", "area mask-below")
.attr("clip-path", "url(#clip-below)")
.attr("fill", "#9CCC65")
.attr("d", area);
// Add line
svg.append("path")
.attr("class", "d3-line d3-line-medium")
.style("stroke", "#558B2F")
.attr("d", line);
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("fill", "#999")
.style("font-size", 12)
.text("Temperature (ºF)");
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", line);
// Bottom clip
svg.select('#clip-below path').attr("d", area.y0(height));
// Top clip
svg.select('#clip-above path').attr("d", area.y0(0));
// Top mask
svg.select('.mask-above').attr("d", area.y0(function(d) { return y(d["San Francisco"]); }))
// Bottom mask
svg.select('.mask-below').attr("d", area);
}
}
});
+213
View File
@@ -0,0 +1,213 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - area chart with missing data
*
* Demo d3.js area chart setup with tooltip and missing data
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
areaMissing('#d3-missing-data', 400);
// Chart setup
function areaMissing(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 20, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Data set
var data = d3.range(60).map(function(i) {
return {x: i / 59, y: i % 5 ? (Math.sin(i / 3) + 2) / 4 : null};
});
// Construct scales
// ------------------------------
// Horizontal
var x = d3.scale.linear()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Add tooltip
var tip = d3.tip()
.attr('class', 'd3-tip')
.offset([-10, 0])
.html(function(d) {
return d.x;
});
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.datum(data)
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(tip);
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.defined(function(d) { return d.y != null; })
.x(function(d) { return x(d.x); })
.y(function(d) { return y(d.y); });
// Area
var area = d3.svg.area()
.defined(line.defined())
.x(line.x())
.y1(line.y())
.y0(y(0));
//
// Append chart elements
//
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Chart elements
// ------------------------------
// Add area
svg.append("path")
.attr("class", "d3-area")
.attr("d", area)
.style("fill", "#81C784");
// Add line
svg.append("path")
.attr("class", "d3-line d3-line-medium")
.attr("d", line)
.style("stroke", "#43A047");
// Add dots
svg.selectAll(".d3-dot")
.data(data.filter(function(d) { return d.y; }))
.enter()
.append("circle")
.attr("class", "d3-dot")
.attr("cx", line.x())
.attr("cy", line.y())
.attr("r", 3)
.style("fill", "#fff")
.style("stroke", "#43A047")
.style("stroke-width", 1.5)
.on('mouseover', tip.show)
.on('mouseout', tip.hide);
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", line);
// Area path
svg.selectAll('.d3-area').attr("d", area);
// Dots
svg.selectAll('.d3-dot').attr("cx", line.x());
}
}
});
@@ -0,0 +1,180 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - small multiples chart
*
* Demo d3.js small multiples chart setup with .csv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
smallMultiples('#d3-small-multiples', 100);
// Chart setup
function smallMultiples(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 10, bottom: 5, left: 10},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%b %Y").parse;
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Construct chart layout
// ------------------------------
// Area
var area = d3.svg.area()
.x(function(d) { return x(d.date); })
.y0(height)
.y1(function(d) { return y(d.price); });
// Line
var line = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.price); });
// Load data
// ------------------------------
d3.csv("assets/demo_data/d3/lines/lines_small_multiples.csv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.price = +d.price;
d.date = parseDate(d.date);
})
// Nest data by symbol
var symbols = d3.nest()
.key(function(d) { return d.symbol; })
.entries(data);
// Compute the maximum price per symbol, needed for the y-domain.
symbols.forEach(function(s) {
s.maxPrice = d3.max(s.values, function(d) { return d.price; });
});
// Compute the minimum and maximum date across symbols.
// We assume values are sorted by date.
x.domain([
d3.min(symbols, function(s) { return s.values[0].date; }),
d3.max(symbols, function(s) { return s.values[s.values.length - 1].date; })
]);
// Create chart
// ------------------------------
// Add SVG elements
var svg = d3Container.selectAll("svg")
.data(symbols)
.enter()
.append("svg")
.attr("class", "multiples")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
//
// Append chart elements
//
// Add area
svg.append("path")
//.attr("class", function(d) {return d.key.toLowerCase();})
.attr("d", function(d) { y.domain([0, d.maxPrice]); return area(d.values); })
.attr("class", "d3-area")
.style("fill", "#81D4FA");
// Add line
svg.append("path")
.attr("d", function(d) { y.domain([0, d.maxPrice]); return line(d.values); })
.attr("class", "d3-line")
.style("stroke", "rgba(0,0,0,0.5)");
// Add name label
svg.append("text")
.attr("class", "multiples-label")
.attr("x", width - 8)
.attr("y", height - 8)
.style("fill", "#fff")
.style("text-anchor", "end")
.style("text-weight", 500)
.text(function(d) { return d.key; });
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Resize all multiples
d3.selectAll(".multiples").attr("width", width + margin.left + margin.right);
// Horizontal range
x.range([0, width]);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", function(d) { y.domain([0, d.maxPrice]); return line(d.values); })
// Area path
svg.selectAll('.d3-area').attr("d", function(d) { y.domain([0, d.maxPrice]); return area(d.values); });
// Text label
svg.selectAll('.multiples-label').attr("x", width - 8);
}
});
}
});
@@ -0,0 +1,208 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - spline transition
*
* Demo d3.js line chart setup with spline transition
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
splineTrransition('#d3-spline-transition', 400);
// Chart setup
function splineTrransition(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 5, bottom: 5, left: 30},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Add data
var n = 50,
random = d3.random.normal(0, .35),
data = d3.range(n).map(random);
// Construct scales
// ------------------------------
// Horizontal
var x = d3.scale.linear()
.domain([1, n - 2])
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.domain([-1, 1])
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.interpolate("basis")
.x(function(d, i) { return x(i); })
.y(function(d, i) { return y(d); });
//
// Append chart elements
//
// Add mask
svg.append("defs")
.append("clipPath")
.attr("id", "transition-clip")
.append("rect")
.attr("width", width)
.attr("height", height);
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + y(0) + ")")
.call(xAxis);
// Vertical
svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add line
var path = svg.append("g")
.attr("clip-path", "url(#transition-clip)")
.append("path")
.datum(data)
.attr("d", line)
.attr("class", "d3-line d3-line-medium")
.style("stroke", "#607D8B");
// Transition
// ------------------------------
// Initialize transition
tick();
// Setup transition
function tick() {
// push a new data point onto the back
data.push(random());
// redraw the line, and slide it to the left
path
.attr("d", line)
.attr("transform", null)
.transition()
.duration(500)
.ease("linear")
.attr("transform", "translate(" + x(0) + ",0)")
.each("end", tick);
// pop the old data point off the front
data.shift();
}
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", line);
// Crosshair
svg.selectAll('#transition-clip rect').attr("width", width);
}
}
});
+259
View File
@@ -0,0 +1,259 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - line chart with chained transitions
*
* Demo d3.js line chart setup with chained transitions and .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Create Uniform checkbox
$(".chained").uniform({
radioClass: 'choice',
wrapperClass: 'border-teal'
});
// Initialize chart
chainedTransitions('#d3-chained-transitions', 400);
// Chart setup
function chainedTransitions(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 90, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// City name
var city = "New York";
// Format data
parseDate = d3.time.format("%Y%m%d").parse;
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(6)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d[city]); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_transitions.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
d["New York"] = +d["New York"];
d["San Francisco"] = +d["San Francisco"];
});
// Set input domains
// ------------------------------
// Horizontal
x.domain([data[0].date, data[data.length - 1].date]);
// Vertical
y.domain(d3.extent(data, function(d) { return d[city]; }));
//
// Append chart elements
//
// Add line
svg.append("path")
.datum(data)
.attr("d", line)
.attr("class", "d3-line d3-line-medium")
.style("stroke", "#FF5722");
// Add text
svg.append("text")
.datum(data[data.length - 1])
.attr("class", "d3-city")
.attr("transform", transform)
.attr("x", 3)
.attr("dy", ".35em")
.text(city);
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("fill", "#999")
.style("font-size", 12)
.text("Temperature (ºF)");
// Transitions
// ------------------------------
// Do stuff on value change
d3.selectAll(".chained").on("change", change);
// Set timeout for auto change
var timeout = setTimeout(function() {
d3.select("input[value=\"San Francisco\"]").property("checked", true).each(change);
$.uniform.update();
}, 3000);
// Change function
function change() {
clearTimeout(timeout);
city = this.value;
// First transition the line & label to the new city.
var t0 = svg.transition().duration(750);
t0.selectAll(".d3-line").attr("d", line);
t0.selectAll(".d3-city").attr("transform", transform).text(city);
// Then transition the y-axis.
y.domain(d3.extent(data, function(d) { return d[city]; }));
var t1 = t0.transition();
t1.selectAll(".d3-line").attr("d", line);
t1.selectAll(".d3-city").attr("transform", transform);
t1.selectAll(".d3-axis-vertical").call(yAxis);
}
// Transform text
function transform(d) {
return "translate(" + x(d.date) + "," + y(d[city]) + ")";
}
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", line);
// Text
svg.selectAll(".d3-city").attr("transform", transform);
}
});
}
});
+265
View File
@@ -0,0 +1,265 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - line chart with pan and zoom
*
* Demo d3.js line chart setup with pan and zoom
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
panZoom('#d3-pan-zoom', 400);
// Chart setup
function panZoom(element, height) {
// Basic setup
// ------------------------------
// Demo data set
var data = [
[{'x':1,'y':0},{'x':2,'y':5},{'x':3,'y':10},{'x':4,'y':0},{'x':5,'y':6},{'x':6,'y':11},{'x':7,'y':9},{'x':8,'y':4},{'x':9,'y':11},{'x':10,'y':2}],
[{'x':1,'y':1},{'x':2,'y':6},{'x':3,'y':11},{'x':4,'y':1},{'x':5,'y':7},{'x':6,'y':12},{'x':7,'y':8},{'x':8,'y':3},{'x':9,'y':13},{'x':10,'y':3}],
[{'x':1,'y':2},{'x':2,'y':7},{'x':3,'y':12},{'x':4,'y':2},{'x':5,'y':8},{'x':6,'y':13},{'x':7,'y':7},{'x':8,'y':2},{'x':9,'y':4},{'x':10,'y':7}]
];
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 20, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Colors
var colors = ['#EF5350', '#5C6BC0', '#66BB6A']
// Construct scales
// ------------------------------
// Horizontal
var x = d3.scale.linear()
.domain([0, 11])
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.domain([-1, 14])
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.tickSize(-height)
.tickPadding(10)
.tickSubdivide(true)
.orient("bottom");
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.tickPadding(10)
.tickSize(-width)
.tickSubdivide(true)
.orient("left");
// Add zoom
// ------------------------------
var zoom = d3.behavior.zoom()
.x(x)
.y(y)
.scaleExtent([1, 10])
.on("zoom", zoomed);
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.call(zoom)
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.interpolate("monotone")
.x(function(d) { return x(d.x); })
.y(function(d) { return y(d.y); });
//
// Append chart elements
//
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong d3-grid")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong d3-grid")
.call(yAxis);
// Append line
// ------------------------------
// Add clip path
svg.append("clipPath")
.attr("id", "zoom-clip")
.append("rect")
.attr("width", width)
.attr("height", height);
// Add line
var path = svg.selectAll('.d3-line')
.data(data)
.enter()
.append("path")
.attr("d", line)
.attr("class", "d3-line d3-line-medium")
.attr("clip-path", "url(#zoom-clip)")
.style('stroke', function(d,i){
return colors[i%colors.length];
});
// Append dots
// ------------------------------
// Group dots
var points = svg.selectAll('.d3-dots')
.data(data)
.enter()
.append("g")
.attr("class", "d3-dots")
.attr("clip-path", "url(#clip)");
// Add dots
points.selectAll('.d3-dot')
.data(function(d, index) {
var a = [];
d.forEach(function(point,i) {
a.push({'index': index, 'point': point});
});
return a;
})
.enter()
.append('circle')
.attr('class', 'd3-dot')
.attr("r", 3)
.attr("transform", function(d) {
return "translate(" + x(d.point.x) + "," + y(d.point.y) + ")"; }
)
.style("fill", "#fff")
.style("stroke-width", 2)
.style('stroke', function(d,i){
return colors[d.index%colors.length];
})
.style("cursor", "pointer");
// Update elements on zoom
// ------------------------------
function zoomed() {
svg.select(".d3-axis-horizontal").call(xAxis);
svg.select(".d3-axis-vertical").call(yAxis);
svg.selectAll('.d3-line').attr('d', line);
points.selectAll('.d3-dot').attr("transform", function(d) {
return "translate(" + x(d.point.x) + "," + y(d.point.y) + ")"; }
);
}
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
svg.selectAll('.d3-axis-vertical').call(yAxis.tickSize(-width));
// Chart elements
// -------------------------
// Mask
svg.select('#zoom-clip rect').attr("width", width);
// Line path
svg.selectAll('.d3-line').attr("d", line);
// Dots
points.selectAll('.d3-dot').attr("transform", function(d) {
return "translate(" + x(d.point.x) + "," + y(d.point.y) + ")"; }
);
}
}
});
+257
View File
@@ -0,0 +1,257 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - basic line chart
*
* Demo d3.js line chart setup with tooltip and .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
lineBasic('#d3-line-basic', 400);
// Chart setup
function lineBasic(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 20, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%d-%b-%y").parse,
bisectDate = d3.bisector(function(d) { return d.date; }).left,
formatValue = d3.format(",.2f"),
formatCurrency = function(d) { return "$" + formatValue(d); }
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(6)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.close); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_basic.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
d.close = +d.close;
});
// Sort data
data.sort(function(a, b) {
return a.date - b.date;
});
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
// Vertical
y.domain([0, d3.max(data, function(d) { return d.close; })]);
//
// Append chart elements
//
// Add line
svg.append("path")
.datum(data)
.attr("class", "d3-line d3-line-medium")
.attr("d", line)
.style("fill", "none")
.style("stroke-width", 2)
.style("stroke", "#4CAF50");
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("fill", "#999")
.style("font-size", 12)
.text("Price ($)");
// Append tooltip
// -------------------------
// Group elements
var focus = svg.append("g")
.attr("class", "d3-crosshair-pointer")
.style("display", "none");
// Pointer
focus.append("circle")
.attr("r", 3.5)
.style("fill", "#fff")
.style("stroke", "#4CAF50")
.style("stroke-width", 2);
// Text
focus.append("text")
.attr("dy", ".35em")
.style("fill", "#333")
.style("stroke", "none")
// Overlay
svg.append("rect")
.attr("class", "d3-crosshair-overlay")
.attr("width", width)
.attr("height", height)
.on("mouseover", function() { focus.style("display", null); })
.on("mouseout", function() { focus.style("display", "none"); })
.on("mousemove", mousemove);
// Display tooltip on mousemove
function mousemove() {
var x0 = x.invert(d3.mouse(this)[0]),
i = bisectDate(data, x0, 1),
d0 = data[i - 1],
d1 = data[i],
d = x0 - d0.date > d1.date - x0 ? d1 : d0;
focus.attr("transform", "translate(" + x(d.date) + "," + y(d.close) + ")");
focus.select("text").text(formatCurrency(d.close)).attr("dx", -26).attr("dy", 30);
}
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", line);
// Crosshair
svg.selectAll('.d3-crosshair-overlay').attr("width", width);
}
}
});
+201
View File
@@ -0,0 +1,201 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - basic area chart
*
* Demo d3.js area chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
areaBasic('#d3-area-basic', 400);
// Chart setup
function areaBasic(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 10, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%d-%b-%y").parse;
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(6)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3.select(element).append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Area
var area = d3.svg.area()
.x(function(d) { return x(d.date); })
.y0(height)
.y1(function(d) { return y(d.close); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_basic.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
d.close = +d.close;
});
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
// Vertical
y.domain([0, d3.max(data, function(d) { return d.close; })]);
//
// Append chart elements
//
// Add area
svg.append("path")
.datum(data)
.attr("class", "d3-area")
.attr("fill", "#29B6F6")
.attr("d", area);
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("fill", "#999")
.style("font-size", 12)
.style("text-anchor", "end")
.text("Price ($)");
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Area path
svg.selectAll('.d3-area').attr("d", area);
}
}
});
+201
View File
@@ -0,0 +1,201 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - bivariate area chart
*
* Demo d3.js bivariate area chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
areaBivariate('#d3-area-bivariate', 400);
// Chart setup
function areaBivariate(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 10, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%Y%m%d").parse;
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(6)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3.select(element).append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Area
var area = d3.svg.area()
.x(function(d) { return x(d.date); })
.y0(function(d) { return y(d.low); })
.y1(function(d) { return y(d.high); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_bivariate.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
d.low = +d.low;
d.high = +d.high;
});
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
// Vertical
y.domain([d3.min(data, function(d) { return d.low; }), d3.max(data, function(d) { return d.high; })]);
//
// Append chart elements
//
// Add area
svg.append("path")
.datum(data)
.attr("class", "d3-area")
.attr("fill", "#FF7043")
.attr("d", area);
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("fill", "#999")
.style("font-size", 12)
.style("text-anchor", "end")
.text("Temperature (ºF)");
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Area path
svg.selectAll('.d3-area').attr("d", area);
}
}
});
+220
View File
@@ -0,0 +1,220 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - gradient encoding line chart
*
* Demo d3.js gradient encoding line chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
lineGradient('#d3-line-gradient', 400);
// Chart setup
function lineGradient(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 20, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%Y%m%d").parse;
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(7)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.temperature); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_gradient.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
d.temperature = +d.temperature;
});
// Set input domains
// ------------------------------
// Horizontal
x.domain([data[0].date, data[data.length - 1].date]);
// Vertical
y.domain(d3.extent(data, function(d) { return d.temperature; }));
//
// Append chart elements
//
// Add gradient
svg.append("linearGradient")
.attr("id", "temperature-gradient")
.attr("gradientUnits", "userSpaceOnUse")
.attr("x1", 0)
.attr("y1", y(50))
.attr("x2", 0)
.attr("y2", y(60))
.selectAll("stop")
.data([
{offset: "0%", color: "#4CAF50"},
{offset: "50%", color: "#81C784"},
{offset: "100%", color: "#FF5722"}
])
.enter()
.append("stop")
.attr("offset", function(d) { return d.offset; })
.attr("stop-color", function(d) { return d.color; });
// Add line
svg.append("path")
.datum(data)
.attr("class", "d3-line d3-line-medium")
.attr("fill", "none")
.attr("stroke", "url(#temperature-gradient)")
.attr("stroke-width", 2)
.attr("d", line);
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("fill", "#999")
.style("font-size", 12)
.text("Temperature (ºF)");
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", line);
}
}
});
+242
View File
@@ -0,0 +1,242 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - multi series line chart
*
* Demo d3.js multi series line chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
lineBasic('#d3-line-multi-series', 400);
// Chart setup
function lineBasic(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 100, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%Y%m%d").parse;
// Colors
var color = d3.scale.category10();
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(5)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3Container.append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Line
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.temperature); });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_multi_series.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
});
// Set color domains
// ------------------------------
// Filter by date
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "date"; }));
// Set colors
var cities = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, temperature: +d[name]};
})
}
});
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
// Vertical
y.domain([
d3.min(cities, function(c) { return d3.min(c.values, function(v) { return v.temperature; }); }),
d3.max(cities, function(c) { return d3.max(c.values, function(v) { return v.temperature; }); })
]);
//
// Append chart elements
//
// Bind data
var city = svg.selectAll(".multiline-city")
.data(cities)
.enter()
.append("g")
.attr("class", "multiline-city");
// Add line
city.append("path")
.attr("class", "d3-line d3-line-medium")
.attr("d", function(d) { return line(d.values); })
.style("stroke", function(d) { return color(d.name); });
// Add text
city.append("text")
.datum(function(d) { return {name: d.name, value: d.values[d.values.length - 1]}; })
.attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.temperature) + ")"; })
.attr("class", "d3-cities")
.attr("x", 10)
.attr("dy", ".35em")
.text(function(d) { return d.name; });
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
var verticalAxis = svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
// Add text label
verticalAxis.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 10)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("fill", "#999")
.style("font-size", 12)
.text("Temperature (ºF)");
})
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-line').attr("d", function(d) { return line(d.values); });
// Text
svg.selectAll('.d3-cities').attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.temperature) + ")"; })
}
}
});
+232
View File
@@ -0,0 +1,232 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - stacked area chart
*
* Demo d3.js stacked area chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
areaStacked('#d3-area-stacked', 400);
// Chart setup
function areaStacked(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 10, bottom: 20, left: 40},
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var parseDate = d3.time.format("%y-%b-%d").parse,
formatPercent = d3.format(".0%");
// Colors
var color = d3.scale.category20();
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(6)
.tickFormat(d3.time.format("%b"));
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickFormat(formatPercent);
// Create chart
// ------------------------------
// Add SVG element
var container = d3.select(element).append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Area
var area = d3.svg.area()
.x(function(d) { return x(d.date); })
.y0(function(d) { return y(d.y0); })
.y1(function(d) { return y(d.y0 + d.y); });
// Stack
var stack = d3.layout.stack()
.values(function(d) { return d.values; });
// Load data
// ------------------------------
d3.tsv("assets/demo_data/d3/lines/lines_stacked.tsv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = parseDate(d.date);
});
// Set color domains
// ------------------------------
// Filter by date
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "date"; }));
// Set colors
var browsers = stack(color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, y: d[name] / 100};
})
};
}));
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
//
// Append chart elements
//
// Bind data
var browser = svg.selectAll(".browser")
.data(browsers)
.enter()
.append("g")
.attr("class", "browser");
// Add area
browser.append("path")
.attr("class", "d3-area")
.attr("d", function(d) { return area(d.values); })
.style("fill", function(d) { return color(d.name); });
// Add text
browser.append("text")
.datum(function(d) { return {name: d.name, value: d.values[d.values.length - 1]}; })
.attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.y0 + d.value.y / 2) + ")"; })
.attr("class", "d3-browsers")
.attr("x", -15)
.attr("dy", ".35em")
.style("fill", "#fff")
.style("text-anchor", "end")
.text(function(d) { return d.name; });
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-area').attr("d", function(d) { return area(d.values); });
// Text
svg.selectAll('.d3-browsers').attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.y0 + d.value.y / 2) + ")"; });
}
}
});
+214
View File
@@ -0,0 +1,214 @@
/* ------------------------------------------------------------------------------
*
* # D3.js - stacked nested area chart
*
* Demo d3.js stacked nested area chart setup with .tsv data source
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Initialize chart
areaNested('#d3-area-stacked-nest', 400);
// Chart setup
function areaNested(element, height) {
// Basic setup
// ------------------------------
// Define main variables
var d3Container = d3.select(element),
margin = {top: 5, right: 20, bottom: 20, left: 40},
n = 3,
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
height = height - margin.top - margin.bottom - 5;
// Format data
var format = d3.time.format("%m/%d/%y");
// Construct scales
// ------------------------------
// Horizontal
var x = d3.time.scale()
.range([0, width]);
// Vertical
var y = d3.scale.linear()
.range([height, 0]);
// Colors
var z = d3.scale.linear()
.domain([0, n - 1])
.range(["#4DB6AC", "#B2DFDB"]);
// Create axes
// ------------------------------
// Horizontal
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(d3.time.days);
// Vertical
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// Create chart
// ------------------------------
// Add SVG element
var container = d3.select(element).append("svg");
// Add SVG group
var svg = container
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Construct chart layout
// ------------------------------
// Stack
var stack = d3.layout.stack()
.offset("zero")
.values(function(d) { return d.values; })
.x(function(d) { return d.date; })
.y(function(d) { return d.value; });
// Nest
var nest = d3.nest()
.key(function(d) { return d.key; });
// Area
var area = d3.svg.area()
.interpolate("basis")
.x(function(d) { return x(d.date); })
.y0(function(d) { return y(d.y0); })
.y1(function(d) { return y(d.y0 + d.y); });
// Load data
// ------------------------------
d3.csv("assets/demo_data/d3/lines/lines_stacked_nest.csv", function(error, data) {
// Pull out values
data.forEach(function(d) {
d.date = format.parse(d.date);
d.value = +d.value;
});
// Pull out nested entries
var layers = stack(nest.entries(data));
// Set input domains
// ------------------------------
// Horizontal
x.domain(d3.extent(data, function(d) { return d.date; }));
// Vertical
y.domain([0, d3.max(data, function(d) { return d.y0 + d.y; })]);
//
// Append chart elements
//
// Add area
svg.selectAll(".d3-area")
.data(layers)
.enter()
.append("path")
.attr("class", "d3-area")
.attr("d", function(d) { return area(d.values); })
.style("stroke", "#fff")
.style("stroke-width", 0.5)
.style("fill", function(d, i) { return z(i); });
// Append axes
// ------------------------------
// Horizontal
svg.append("g")
.attr("class", "d3-axis d3-axis-horizontal d3-axis-strong")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Vertical
svg.append("g")
.attr("class", "d3-axis d3-axis-vertical d3-axis-strong")
.call(yAxis);
});
// Resize chart
// ------------------------------
// Call function on window resize
$(window).on('resize', resize);
// Call function on sidebar width change
$('.sidebar-control').on('click', resize);
// Resize function
//
// Since D3 doesn't support SVG resize by default,
// we need to manually specify parts of the graph that need to
// be updated on window resize
function resize() {
// Layout variables
width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
// Layout
// -------------------------
// Main svg width
container.attr("width", width + margin.left + margin.right);
// Width of appended group
svg.attr("width", width + margin.left + margin.right);
// Axes
// -------------------------
// Horizontal range
x.range([0, width]);
// Horizontal axis
svg.selectAll('.d3-axis-horizontal').call(xAxis);
// Chart elements
// -------------------------
// Line path
svg.selectAll('.d3-area').attr("d", function(d) { return area(d.values); })
}
}
});