Simple tables in D3

by Gregor Aisch

HTML

<script src="https://gka.github.io/d3-jetpack/d3v4+jetpack.js"></script>

CSS

body { font-family: 'Helvetica Neue', Helvetica; font-weight: 300; padding: 20px;}
th { text-align: left; }
th, td { padding: 0 1em 0.5ex 0;}
th.center, td.center { text-align: center; }
th.num, td.num { text-align: right; }

JavaScript

/*
 * read more about this demo:
 * https://www.vis4.net/blog/posts/making-html-tables-in-d3-doesnt-need-to-be-a-pain/
 *
 * in case you're wondering about d3.f or appendMany(), please check out d3-jetpack
 * https://github.com/gka/d3-jetpack
 */

// the table rows, typically loaded from data file using d3.csv
var movies = [
    { title: "The Godfather", year: 1972, length: 175, budget: 6000000, rating: 9.1 },
    { title: "The Shawshank Redemption", year: 1994, length: 142, budget: 25000000, rating: 9.1 },
    { title: "The Lord of the Rings: The Return of the King", year: 2003, length: 251, budget: 94000000, rating: 9 },
    { title: "The Godfather: Part II", year: 1974, length: 200, budget: 13000000, rating: 8.9 },
    { title: "Shichinin no samurai", year: 1954, length: 206, budget: 500000, rating: 8.9 },
    { title: "Buono, il brutto, il cattivo, Il", year: 1966, length: 180, budget: 1200000, rating: 8.8 },
    { title: "Casablanca", year: 1942, length: 102, budget: 950000, rating: 8.8 },
    { title: "The Lord of the Rings: The Fellowship of the Ring", year: 2001, length: 208, budget: 93000000, rating: 8.8 },
    { title: "The Lord of the Rings: The Two Towers", year: 2002, length: 223, budget: 94000000, rating: 8.8 },
    { title: "Pulp Fiction", year: 1994, length: 168, budget: 8000000, rating: 8.8 }
];

// column definitions
var columns = [
    { head: 'Movie title', cl: 'title', html: d3.f('title') },
    { head: 'Year', cl: 'center', html: d3.f('year') },
    { head: 'Length', cl: 'center', html: d3.f('length', length()) },
    { head: 'Budget', cl: 'num', html: d3.f('budget', d3.format('$,')) },
    { head: 'Rating', cl: 'num', html: d3.f('rating', d3.format('.1f')) }
];

// create table
var table = d3.select('body')
		.append('table');

// create table header
table.append('thead').append('tr')
    .selectAll('th')
    .data(columns).enter()
    .append('th')
    .attr('class', d3.f('cl'))
    .text(d3.f('head'));

// create table...