{
let w = 1000, h = 800, dim = 85;
let svg = DOM.svg(w,h);
let ratingMinMax = d3.extent(movie_data, d => +d.imdbRating);
let votesMinMax = d3.extent(movie_data, d => +d.imdbVotes.replace(',',''));
let sizeScaleF = d3.scaleLinear().domain(ratingMinMax).range([0.1, 1]);
let numScaleF = d3.scaleQuantize().domain(votesMinMax).range([3,6,9,12]);
let drawingsData = _.map(movie_data, d => {
let numDrawing = numScaleF(+d.imdbVotes.replace(',',''));
let drawingSize = sizeScaleF(+d.imdbRating);
return {
drawingSize,
drawings: _.times(numDrawing, i =>
{return {angle: 270 * i / numDrawing, diamondPath, smoothPath}}),
numDrawing
}
});
console.log(drawingsData)
let drawings = d3.select(svg)
.selectAll('g')
.data(drawingsData)
.enter()
.append('g')
.attr('transform', (d, i) => `translate(${(i % 10) * dim}, ${Math.floor(i / 10) * dim}) scale(${d.drawingSize})`);
drawings.selectAll('g')
.data(d => d.drawings).enter().append('path')
.attr('d', d => d.smoothPath)
.attr('transform', d => `rotate(${d.angle})`)
.attr('fill', 'transparent')
.attr('stroke', (d, i) => d3.interpolateWarm(d.angle / 360));
drawings.selectAll('g')
.data(d => d.drawings).enter().append('path')
.attr('d', d => d.diamondPath)
.attr('transform', d => `rotate(${d.angle})`)
.attr('fill', 'transparent')
.attr('stroke', (d, i) => d3.interpolateWarm(d.angle / 360));
drawings.selectAll('g')
.data(d => d.drawings).enter().append('circle')
.attr('cx', '0')
.attr('cy', '-25')
.attr('r', '5')
.attr('transform', d => `rotate(${d.angle})`)
.attr('fill', (d, i) => d3.interpolateCool(d.angle / 360))
.attr('stroke', 'none');
return svg;
}