var vWidth = 600;
var vHeight = 400;
// Prepare our physical space
var g = d3.select('svg').attr('width', vWidth).attr('height', vHeight).select('g');
// Get the data from our CSV file
/*var csv_url = "https://gist.githubusercontent.com/denjn5/bb835c4fb8923ee65a13008832d2efed/raw/9e8d621174aba36624311944a93cdf8d96109099/data.csv";
d3.csv(csv_url, function(error, vCsvData) {
if (error) throw error;
vData = d3.stratify()(vCsvData);
drawViz(vData);
});*/
// Get the data from our CSV string
var csvString = 'content,parent,count\n';
csvString += 'fruit,\n';
csvString += 'apple,fruit,10\n';
csvString += 'oranges,fruit,20\n';
csvString += 'strawberry,fruit,30\n';
csvString += 'pineapple,fruit,40\n';
csvString += 'kiwi,fruit,50\n';
var data = d3.csvParse(csvString);
var stratify = d3.stratify()
.id(function(d) { return d.content; })
.parentId(function(d) { return d.parent; });
var treeData = stratify(data);
// assign the name to each node
treeData.each(function(d) {
d.name = d.id;
});
drawViz(treeData, data);
function drawViz(vData, data) {
// Declare d3 layout
var vLayout = d3.treemap().size([vWidth, vHeight]).
paddingOuter(3);
// Layout + Data
var vRoot = d3.hierarchy(vData).sum(function (d) {
return d.data.count;
});
var vNodes = vRoot.descendants();
vLayout(vRoot);
var vSlices = g.selectAll('rect').data(vNodes).enter().append('rect');
// Draw on screen
vSlices.attr('x', function (d) { return d.x0; })
.attr('y', function (d) { return d.y0; })
.attr('width', function (d) { return d.x1 - d.x0; })
.attr('height', function (d) { return d.y1 - d.y0; });
g.selectAll('g').data(vNodes).enter()
.append('text')
.attr('x', function (d) { return d.x0; })
.attr('y', function (d) { return d.y0; })
.text(function(d) { if (d.data.depth>0) return d.data.id; })
.attr("dy", "1em")
.attr("dx", "1em");
}
rect {
fill: #8d4705;
opacity: 0.3;
stroke: #FF0000;
stroke-width: 2px;
}
text {
stroke: #FF0000;
stroke-width: 1px;
font-family: 'Verdana';
font-size: 12px;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg>
<g></g>
</svg>