chart = {
const svg = d3.select(DOM.svg(size.width + margin.left + margin.right, size.height + margin.bottom + margin.top))
let max = 0
group_data.forEach( d => {
d.forEach( dd => {
if( max < dd.data.length )
max = dd.data.length
})
})
const color = d3.scaleSequential(d3[interpolator]).domain([0, max])
let chart = svg.append('g')
.attr("transform", `translate(${margin.left}, ${margin.top})`);
chart.selectAll('g')
.data(group_data)
.enter().append('g')
.selectAll('rect')
.data( (g,i)=>{
return g
})
.enter().append('rect')
.attr('class', 'grid-rect')
.attr('y', d => {
return scaleY(d.date)
})
.attr('x', d => {
return scaleX(d.data.x0)
})
.attr('width', d => {
return scaleX(d.data.x1) - scaleX(d.data.x0) - 1
})
.attr('height', size.rect_height)
.attr('fill', d => {
if(d.data.length == 0)
return "#fff"
if(d.data.length >= 1)
return color(d.data.length)
})
.append("svg:title")
.text( d=> {
let dt = new Date(d.date)
return `Date:${dt.toISOString().split('T')[0]}, Range:${d.data.x0} - ${d.data.x1}, Count: ${d.data.length}`
});
svg.append("g")
.call(xAxis)
svg.append("g")
.call(yAxis)
return svg.node()
}