chart = (key, fullChart) => {
var race = key;
var data = parse(cnn[key], key).filter(datum => datum.data.percentReporting < 99 && datum.data.totalVotesRemaining > 4000);
var height = data.length * 25 + margin.top + margin.bottom;
var series = d3.stack()
.keys(fullChart?["demShare", "demShareRemaining", "repShare", "repShareRemaining"]:["demShareRemaining", "repShareRemaining"])
(data)
.map(d => (d.forEach(v => v.key = d.key), d));
var x = d3.scaleLinear()
.domain([0, d3.max(series, d => d3.max(d, d => d[1]))])
.range([margin.left, width - margin.right]);
var y = d3.scaleBand()
.domain(data.map(d => d.data.countyName))
.range([margin.top, height - margin.bottom])
.padding(0.28);
var yAxes = g => g
.attr("transform", `translate(${margin.left},0)`)
.call(d3.axisLeft(y).tickSizeOuter(0))
.call(g => g.selectAll(".domain").remove());
var xAxes = g => g
.attr("transform", `translate(0,${margin.top})`)
.call(d3.axisTop(x).ticks(width / 100, "s"))
.call(g => g.selectAll(".domain").remove());
console.log(series)
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height]);
svg.append("g")
.selectAll("g")
.data(series)
.join("g")
.attr("fill", d => color(d.key))
.selectAll("rect")
.data(d => d)
.join("rect")
.attr("x", d => x(d[0]))
.attr("y", (d, i) => {
return y(d.data.data.countyName)
})
.attr("width", d => x(d[1]) - x(d[0]))
.attr("height", y.bandwidth())
.append("title")
.text(d => `${d.data.data.countyName} ${d.key}
${formatValue(d.data[d.key])}`);
svg.append("g")
.call(xAxes);
svg.append("g")
.call(yAxes);
return svg.node();
}