-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmusic2017_main.js
More file actions
100 lines (87 loc) · 2.69 KB
/
music2017_main.js
File metadata and controls
100 lines (87 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import {
select,
json,
cluster,
hierarchy,
linkHorizontal,
zoom,
event,
scaleSequential,
scaleOrdinal,
max,
interpolatePlasma,
schemeCategory10,
interpolateRainbow
} from 'd3';
import { loadData } from './loadData';
import { treemap } from './treemap';
import { stackedAreaHorizontal } from './stackedAreaHorizontal';
import { stackedAreaVertical } from './stackedAreaVertical';
import { colorLegend } from './colorLegend';
var jsonData, artistData, byWeekPlaysGenre, byWeekPlaysArtist, totalPlaysArtist;
var artistColorScale, genreColorScale;
var topArtists, topGenres;
var playColorScale;
var selectedArtists = [];
var deepestGenresByArtist;
var byWeekPlays;
var numStackedAreaArtists = 30;
const colorValue = d => d.artist;
const colorScale = scaleOrdinal();
const verticalAreaSvg = select('.stacked-area-artist-vertical');
const verticalAreaG = verticalAreaSvg.append('g')
.attr('transform', `translate(${250}, 0), rotate(90)`);
const artistLegendG = verticalAreaSvg.append('g')
.attr('class', 'legend')
.attr('transform', `translate(${5},${20})`)
loadData('https://raw.githubusercontent.com/OxfordComma/oxfordcomma.github.io/master/music2017.csv').then(data => {
jsonData = data.jsonData;
artistData = data.artistData;
byWeekPlaysGenre = data.byWeekPlaysGenre;
byWeekPlaysArtist = data.byWeekPlaysArtist;
topGenres = data.topGenres;
topArtists = data.topArtists;
deepestGenresByArtist = data.deepestGenresByArtist;
totalPlaysArtist = data.totalPlaysArtist;
artistColorScale = scaleOrdinal()
.domain(topArtists.slice(0, numStackedAreaArtists));
const n = artistColorScale.domain().length;
artistColorScale
.range(artistColorScale.domain().map((d, i) => interpolateRainbow(i/(n+1))));
genreColorScale = scaleOrdinal()
.domain(topGenres)
.range(schemeCategory10);
playColorScale = scaleSequential(interpolatePlasma)
.domain([0, max(Object.values(totalPlaysArtist)) + 100]);
render();
})
const onClickArtist = d => {
if (!selectedArtists.includes(d))
selectedArtists.push(d);
else
selectedArtists = selectedArtists.filter(val => val != d);
console.log(selectedArtists)
render();
};
const render = () => {
verticalAreaG.call(stackedAreaVertical, {
dataToStack: byWeekPlaysArtist,
topArtists: topArtists,
colorScale: artistColorScale,
selectedLegendList: selectedArtists,
width: 500,
height: 850,
numArtists: numStackedAreaArtists,
onClick: onClickArtist,
year: 2017
});
artistLegendG.call(colorLegend, {
colorScale: artistColorScale,
circleRadius: 5,
spacing: 15,
textOffset: 12,
backgroundRectWidth: 135,
onClick: onClickArtist,
selectedLegendList: selectedArtists
});
}