viz = {
const margin = 0
const height = 500 - margin * 2
const width = 1000 - margin * 2
const svgW = d3.select(DOM.svg(width + margin * 2, height + margin * 2))
const svg = svgW.append('g').attr('transform', `translate(${margin},${margin})`)
var x = d3.scaleLinear().domain([0,data.length]).range([0,width])
var y = d3.scaleLinear().domain(d3.extent(data)).range([height,0])
var gradient = svg
.append("linearGradient")
.attr("y1", 0)
.attr("y2", height)
.attr("x1", "0")
.attr("x2", "0")
.attr("id", "gradient")
.attr("gradientUnits", "userSpaceOnUse")
gradient
.append("stop")
.attr("offset", "0")
.attr("stop-color", "black")
gradient
.append("stop")
.attr("offset", "1")
.attr("stop-color", "red")
svg.append('rect')
.attr('width', width)
.attr('height', height)
.attr('opacity', .1)
.attr('fill', 'url(#gradient)')
var rect = svg
.append('rect')
.attr('width', width)
.attr('height', 50)
.attr('y', 140)
.attr('stroke', 'white')
.attr('stroke-width', 1)
.attr('fill', 'url(#gradient)')
rect.transition().duration(1000)
.attr('y', height-50)
svg.on('mousemove', function(d){
rect.attr('y', d3.mouse(this)[1])
})
return svgW.node()
}