As you stated, your us.json does not have state names in it. However, these are unique identifiers and, fortunately, Mr. Bostok has named these identifiers here .
So, correct this code a bit.
First make json requests to output the data:
// path data d3.json("us.json", function(unitedState) { var data = topojson.feature(unitedState, unitedState.objects.states).features; // our names d3.tsv("us-state-names.tsv", function(tsv){ // extract just the names and Ids var names = {}; tsv.forEach(function(d,i){ names[d.id] = d.name; });
Now add our visualization:
// build paths g.append("g") .attr("class", "states-bundle") .selectAll("path") .data(data) .enter() .append("path") .attr("d", path) .attr("stroke", "white") .attr("class", "states"); // add state names g.append("g") .attr("class", "states-names") .selectAll("text") .data(data) .enter() .append("svg:text") .text(function(d){ return names[d.id]; }) .attr("x", function(d){ return path.centroid(d)[0]; }) .attr("y", function(d){ return path.centroid(d)[1]; }) .attr("text-anchor","middle") .attr('fill', 'white'); ....
It works here.
source share