JSFiddle - React, Tailwind, and code Playground
HTML
<h4>a table</h4>
<div id="table"></div>
CSS
.line {
fill: none;
stroke: #000;
stroke-width: 1.0px;
}
JavaScript
var columns = ['Fruit', 'Color', 'Lines']
var data = [
['Orange', 'Orange', [6,3,3,2,5]],
['Apple', 'Red', [6,2,6,5,5]],
['Grape', 'Purple', [9,1,2,3,1]]
]
// create table
var table = d3.select("#table").append("table");
var thead = table.append("thead").append("tr");
thead.selectAll("th")
.data(columns)
.enter()
.append("th")
.text(function(d) {
return d;
});
var tbody = table.append("tbody");
var trows = tbody
.selectAll("tr")
.data(data)
.enter()
.append("tr");
var tcells = trows
.selectAll("td")
.data(function(d, i) { return d; })
.enter()
.append("td")
.text(function(d, i) { return d; });
// update (add a column with graphs)
thead.append("th").text('Graphs');
trows.selectAll("td.graph")
//use a class so you don't re-select the existing <td> elements
.data(function(d) {return [d[2]];})
.enter()
.append("td")
.attr("class", "graph")
.each(lines);
// a sparklines plot
function lines(test) {
var width = 100, height = 20;
var data = []
for (i = 0; i < test.length; i++) {
data[i] = {
'x': i,
'y': +test[i]
}
}
var x = d3.scale.linear()
.range([0, width - 10])
.domain([0,5]);
var y = d3.scale.linear()
.range([height, 0])
.domain([0,10]);
var line = d3.svg.line()
.x(function(d) {return x(d.x)})
.y(function(d) {return y(d.y)});
d3.select(this).append('svg')
.attr('width', width)
.attr('height', height)
.append('path')
.attr('class','line')
.datum(data)
.attr('d', line);
}