{
let svg = d3.create('svg').attr('width', 300).attr('height', 400)
let g = svg.append('g')
.attr('transform', 'translate(25,25)')
let ordinal_values = ['A','B','C','D']
let makeup_data = ordinal_values.map(d => { return {O:d,Q:Math.random()}})
let x_scale = d3.scaleBand()
.domain(ordinal_values)
.range([0,250])
.paddingInner(0.2)
let height_scale = d3.scaleLinear()
.domain([0,d3.max(makeup_data, d => d.Q)])
.range([0,350])
g.append('rect')
.attr('width', 250).attr('height', 350)
.attr('fill', 'none').attr('stroke', d3.hcl(0,0,45))
g.selectAll('bar')
.data(makeup_data)
.enter()
.append('rect')
.attr('x', d => x_scale(d.O))
.attr('y', d => 350-height_scale(d.Q))
.attr('width', x_scale.bandwidth())
.attr('height', d => height_scale(d.Q))
.attr('fill', d3.hcl(120,30,66)).attr('stroke', d3.hcl(0,0,30)).attr('stroke-width', .4)
return svg.node()
}