Built with blockbuilder.org
forked from sxywu's block: DS July: Code 1
forked from sxywu's block: DS July: Code 2
forked from sxywu's block: DS July: Code 3
forked from sxywu's block: DS July: Code 4
forked from sxywu's block: DS July: Code 5
forked from sxywu's block: DS July: Code 6
forked from sxywu's block: DS July: Code 7
forked from sxywu's block: Film Flowers, All
forked from anonymous's block: Film Flowers, Refactored
forked from sxywu's block: Film Flowers, Single Scaled Complete
forked from sxywu's block: Film Flowers, Single Complete
forked from superdodon's block: Film Flowers, Single Complete
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js'></script>
<link href='https://fonts.googleapis.com/css?family=Libre+Baskerville:400,700' rel='stylesheet' type='text/css'>
<style>
svg {
width: 600px;
height: 20000px;
}
</style>
</head>
<body>
<svg></svg>
<script>
const width = 600;
const height = 600;
const petalPaths = [
[
'M50,50',
'C45,35 35,20 50,20',
'C65,20 65,35 50,50'
],
[
'M50,50',
'C45,35 35,20 50,20',
'C65,20 65,35 50,50'
],
[
'M50,50',
'C45,35 35,20 50,20',
'C65,20 65,35 50,50'
],
[
'M50,50',
'C45,35 35,20 50,20',
'C65,20 65,35 50,50'
]
];
// petal lookup for PG ratings
const pathLookup = {
G: petalPaths[0],
PG: petalPaths[1],
'PG-13': petalPaths[2],
R: petalPaths[3],
};
// grab svg
const svg = d3.select('svg');
/*****************************************************
** get movie data
******************************************************/
d3.json('movies.json', function(movies) {
movies = _.map(movies, movie => {
return {
rating: ++movie.imdbRating,
votes: parseInt(movie.imdbVotes.replace(/\,/g, '')),
year: ++movie.Year,
title: movie.Title,
pg: movie.Rated,
}
});
// 1. create petal data for just the first movie
const firstMovie = movies[0]
//const numPetals = 6
const minMaxVotes = d3.extent(movies, d => d.votes);
const numPetalsScale = d3.scaleQuantize()
.domain(minMaxVotes)
.range(_.range([1, 10])); //[1,2,3,4,5,6,7,8,9,10]
const petalData = _.times(numPetals, (i) => {
// 1. rotation of the petal
const rotate = (i / numPetals) * 360;
// 2. path of petal (pg)
// 3. size of petals (IMDB ratings)
console.log(firstMovie.votes)
return {
rotate,
path: pathLookup[firstMovie.pg],
}
});
// 2. draw the petals using d3's data-binding and enter-append
// (hint: use SVG transform for translation, and rotation)
svg.selectAll('path')
.data(petalData).enter().append('path')
.attr('transform', d => {
return `translate(100,100)rotate(${d.rotate},50,50)`
})
.attr('d', d => d.path)
.attr('fill', function(d,i) {return (i % 2 === 0) ? 'red' : 'orange'})
.attr('stroke', '#333');
});
</script>
</body>
https://d3js.org/d3.v4.min.js
https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js