groupChart = {
const base = d3.create('svg').attr('width',width).attr('height',height)
const chart = base.append('g').attr('transform',`translate(50,${margin.top})`)
const group = d3.scaleBand()
.domain(boroughList)
.range([visHeight, 0])
.padding(0.2);
const x = d3.scaleLinear()
.domain([0, maxValueBorough]).nice()
.range([0, visWidth]);
const y = d3.scaleBand()
.domain(categoryList)
.range([0, group.bandwidth()])
.padding(0.2);
const yAxis = d3.axisLeft(group);
const xAxis = d3.axisBottom(x);
chart.append('g')
.attr('transform', `translate(0,${visHeight})`)
.call(xAxis)
.call(g => g.selectAll('.domain').remove());
chart.append("g")
.attr('transform', `translate(0,0)`)
.call(yAxis)
.call(g => g.selectAll('.domain').remove())
.append('text')
.attr('fill', 'black')
.attr('text-anchor', 'start')
.attr('dominant-baseline', 'hanging')
.attr('font-weight', 'bold')
.attr('y', -margin.top + 5)
.attr('x', -margin.left)
.text('Zip Code Permits')
const groups = chart.append('g')
.selectAll('g')
.data(boroughPermitMap)
.join('g')
.attr('transform', ([borough, categoryPermit]) => `translate(0,${group(borough)})`);
groups.selectAll('rect')
.data(([borough, categoryPermit]) => categoryPermit)
.join('rect')
.attr('fill', ([category,value]) => color(category))
.attr('y', ([category,value]) => y(category))
.attr('height', y.bandwidth())
.attr('x', 0)
.attr('width', ([category,value]) => x(value))
return base.node()
}