accessibility

by nancynancy

HTML

<script src="https://d3js.org/d3.v4.min.js"></script>
<pre id="data">
color,clarity,count,heights
G,SI1,28,28
H,SI1,39,67
G,SI2,20,20
H,SI2,27,47
G,VS1,26,26
H,VS1,15,41
</pre>


<div id="content"></div>

CSS

body,html{
	margin: 0;
	padding: 0;
	font-family: "Arial", sans-serif;
	font-size: 0.95em;
	text-align: center;
	background-color: white;
}

pre {
  display:none;
  }

JavaScript

var margin = {
  top: 20,
  right: 20,
  bottom: 30,
  left: 20
};
var width = 200 - margin.left - margin.right;
var height = 150 - margin.top + margin.bottom;
var x = d3.scaleBand().rangeRound([0, width]).padding(0.5);
var y = d3.scaleLinear().range([height, 40]);
var xAxis = d3.axisBottom(x);
var yAxis = d3.axisLeft(y);
var color = d3.scaleOrdinal(["hotpink", "purple"]);
var myData = d3.csvParse(d3.select("pre#data").text());

update();

function update() {

  x.domain(myData.map(function(d) {
    return d.clarity;
  }));
  y.domain([0, 40])

  myData.forEach(function(d) {
    d.count = +d.count;
    d.heights = +d.heights;
  });

  var panelData = d3.nest()
    .key(function(d) {
      return d.color;
    })
    .entries(myData);

  var panelUpdate = d3.selectAll("svg.container")
    .data(panelData, d => d.key)
  // instead of index, actual value of key

  var panel = panelUpdate
    .enter().append("svg") // magic!
    .attr("class", "container")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," +
      margin.top + ")");

  console.log({
    panelData
  });


  panel.selectAll(".bar")
    .data(function(d) {
      return d.values
    }) // which level
    .enter()
    .append("rect")
    .attr("class", "bar")
    .attr("x", function(d) {
      return x(d.clarity);
    })
    .attr("fill", function(d) {
      return color(d.color);
    })
    .attr("width", x.bandwidth() - .1)
    .attr("y", function(d) {
      return y(d.count);
    })
    .attr("height", function(d) {
      return height - y(d.count);
    })
    .attr("aria-label", function(d) {
      return "bar of " + d.clarity + " clarity and " + d.color + " color, value " + d.count
    })


  panel.selectAll(".text")
    .data(function(d) {
      return d.values
    }) // which level
    .enter()
    .append("text")
    .attr("fill", "black")
    .attr("x", function(d){...