{
const data = [
{ label: "A", value: 10 },
{ label: "B", value: 20 },
{ label: "C", value: 15 },
{ label: "D", value: 8 },
{ label: "E", value: 12 }
];
const svg = d3.select(DOM.svg(300, 200));
const margin = { top: 20, right: 20, bottom: 30, left: 40 };
const width = +svg.attr("width") - margin.left - margin.right;
const height = +svg.attr("height") - margin.top - margin.bottom;
const xScale = d3.scaleBand()
.rangeRound([0, width])
.padding(0.1)
.domain(data.map(d => d.label));
const yScale = d3.scaleLinear()
.rangeRound([height, 0])
.domain([0, d3.max(data, d => d.value)]);
const g = svg.append("g")
.attr("transform", `translate(${margin.left}, ${margin.top})`);
g.selectAll("rect")
.data(data)
.enter().append("rect")
.attr("x", d => xScale(d.label))
.attr("y", d => yScale(d.value))
.attr("width", xScale.bandwidth())
.attr("height", d => height - yScale(d.value))
.attr("fill", "steelblue");
g.append("g")
.attr("transform", `translate(0, ${height})`)
.call(d3.axisBottom(xScale));
g.append("g")
.call(d3.axisLeft(yScale).ticks(5));
return svg.node();
}