D3.js
data-driven documents
Intro
- Popular open-source project
- A JavaScript library with a focus on data visualizations
- Data-binding is a powerful method
- A combination of building blocks (modules)
- Used for mapping data to the DOM
- Smooth animation transformations
SVG's
- Scalable Vector Graphics
- XML file format for rendering graphics
- Can be rendered in modern browsers
JSON
- JavaScript Object Notation
- Syntax for storing and exchanging data
- Can present data by:
- keys/values (objects)
- array of values
- Is text only, therefore it can be read and used as a data format by any programming language
{
"data": [
{
"id": "X999_Y999",
"from": {
"name": "Tom Brady", "id": "X12"
},
"message": "Looking forward to 2010!",
"actions": [
{
"name": "Comment",
"link": "http://www.facebook.com/X999/posts/Y999"
},
{
"name": "Like",
"link": "http://www.facebook.com/X999/posts/Y999"
}
],
"type": "status",
"created_time": "2010-08-02T21:27:44+0000",
"updated_time": "2010-08-02T21:27:44+0000"
}
]
}
{
"red":"#f00",
"green":"#0f0",
"blue":"#00f",
"cyan":"#0ff",
"magenta":"#f0f",
"yellow":"#ff0",
"black":"#000"
}
{
"colorsArray":[{
"red":"#f00",
"green":"#0f0",
"blue":"#00f",
"cyan":"#0ff",
"magenta":"#f0f",
"yellow":"#ff0",
"black":"#000"
}
]
}
Built-in Request methods
Getting data from another file into an application
- d3.csv (most used)
- d3.json (most used)
- d3.html
- d3.tsv
- d3.text
- d3.xml
Example of methods
// JSON method
d3.json('path-to-file.json', function(error, data){
});
// CSV method
d3.csv('path-to-file.csv', function(error, data){
});
// HTML method
d3.html('path-to-file.html', function(error, data){
});
// text method
d3.text('path-to-file.txt', function(error, data){
});
// TSV method
d3.tsv('path-to-file.tsv', function(error, data){
});
// XML method
d3.xml('path-to-file.xml', function(error, data){
});
d3.json method
// D3 JSON method
d3.json('path-to-file.json', function(error, data){
if ( error ) {
// handle the error
}
// do something with the loaded data
});
- First argument is a callback to a file or data object
- Second argument is a callback function and is only executed after the request returns data or fails
Data-binding
- D3 does not store data within variables
- D3 stores data within the DOM selectors by calling the selection.data() method
- You can create elements in the DOM based on data
Simple data-binding
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
</ul>
</body>
</html>
// Data to be bind
var dummyData = [2, 30, 45, 11];
// Select all <li>
d3.selectAll('li')
// Bind data from Array with the data method
.data(dummyData)
// Pass the data to <li> and concat px to the data to change styling
.style('margin-left', function(data) {
return data + 'px';
});
Selections
-
You first need to select an element because you can change or modify it
- Takes valid CSS selectors as parameters
- Uses 2 primary methods
// Returns the first element matching the CSS selector given.
d3.select('div')
d3.select('#name')
// Returns a selection in an array that contains
// all elements matching the CSS selector given.
d3.selectAll('div')
d3.selectAll('#name')
Changing attributes
- Can be used to adjust attributes for SVG's and non-SVG's such as size or position
- Can be combined with data-binding and mouse events
// method
.attr()
// Needs 2 values: attribute that needs to be changed and the new value
selection.attr("attribute string", new value);
// Example
circle.attr("r", 55);
Changing styles
- Can be used to adjust styling for SVG's and non-SVG's such as size or position
- D3 can utilize these new changes without the need of a patch
- Can be combined with data-binding and mouse events
// method
.style()
// Needs 2 values: CSS style that needs to be changed and the new value
selection.style("CSS Style string", new value);
// Example
circle.style("fill", "#FF0000");
circle.style("stroke", "#000000");
Transitions
- Used on a selection to allow it's operators to apply smoothly over time
- By default it starts and last for a duration of 250ms
// Select an element and chain transition to it
d3.select('div').transition();
// Select a div element and give it the ease transition
d3.select('div')
.transition()
.ease('bounce');
D3.js
By Kim Massaro
D3.js
A simple introduction to D3.js
- 688