{
const height = 200
const width = 500
const margin = ({top: 10, right: 10, bottom: 20, left: 20})
const xScale3 = d3.scaleLinear()
.domain([0, d3.max(barData, d => d.value)])
.range([0, width])
const yScale3 = d3.scaleBand()
.domain(barData.map(d => d.key))
.range([0, height])
const xScaleWithMargin = xScale3.copy()
.range([margin.left, width - margin.right])
const yScaleWithMargin = yScale3.copy()
.range([margin.top, height - margin.bottom])
const container = d3.create("svg")
.attr("width", width)
.attr("height", height)
.style('border', '1px dotted #999');
const g = container.selectAll("g")
.data(barData)
.enter()
.append("g")
.attr("transform", d => `translate(${margin.left}, ${yScaleWithMargin(d.key)})`);
g.append("rect")
.attr("width", d => xScaleWithMargin(d.value) - xScaleWithMargin(0))
.attr("height", d => yScaleWithMargin.bandwidth())
.style("fill", d => color(d.key))
.style("stroke", "white")
g.append("text")
.attr("x", d => xScaleWithMargin(d.value) - xScaleWithMargin(0))
.attr("dx", -20)
.attr("dy", '1.5em')
.style("fill", "white")
.style("font-size", "small")
.text(d => d.value)
container.append("g")
.attr("transform", `translate(0, ${height - margin.bottom})`)
.call(d3.axisBottom(xScaleWithMargin))
container.append("g")
.attr("transform", `translate(${margin.left}, 0)`)
.call(d3.axisLeft(yScaleWithMargin))
return container.node()
}