Skip to content

Commit bc099b1

Browse files
committed
feat: add geographic radar section (Section 8)
2 parents 8383d2f + bdc03c8 commit bc099b1

5 files changed

Lines changed: 756 additions & 1 deletion

File tree

docs/data/geo_data.json

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
{
2+
"regions": [
3+
{
4+
"name": "Europe",
5+
"countries": [
6+
"France",
7+
"Italy",
8+
"UK",
9+
"Spain",
10+
"Germany",
11+
"Sweden",
12+
"Switzerland",
13+
"Netherlands",
14+
"Russia",
15+
"Poland",
16+
"Greece",
17+
"Denmark",
18+
"Czech Republic",
19+
"Romania",
20+
"Portugal",
21+
"Latvia"
22+
],
23+
"count": 15874,
24+
"families": {
25+
"floral": 28360,
26+
"woody": 18218,
27+
"citrus": 15592,
28+
"spicy": 9420,
29+
"fresh": 5639,
30+
"sweet": 8514,
31+
"musky": 16417,
32+
"fruity": 7549
33+
},
34+
"topNotes": [
35+
{
36+
"note": "musk",
37+
"count": 6757
38+
},
39+
{
40+
"note": "bergamot",
41+
"count": 5792
42+
},
43+
{
44+
"note": "jasmine",
45+
"count": 5179
46+
},
47+
{
48+
"note": "sandalwood",
49+
"count": 5139
50+
},
51+
{
52+
"note": "patchouli",
53+
"count": 5027
54+
}
55+
]
56+
},
57+
{
58+
"name": "North America",
59+
"countries": [
60+
"USA",
61+
"Canada"
62+
],
63+
"count": 4580,
64+
"families": {
65+
"floral": 7968,
66+
"woody": 4559,
67+
"citrus": 4016,
68+
"spicy": 2254,
69+
"fresh": 1518,
70+
"sweet": 2080,
71+
"musky": 4523,
72+
"fruity": 2506
73+
},
74+
"topNotes": [
75+
{
76+
"note": "musk",
77+
"count": 2309
78+
},
79+
{
80+
"note": "sandalwood",
81+
"count": 1559
82+
},
83+
{
84+
"note": "amber",
85+
"count": 1474
86+
},
87+
{
88+
"note": "bergamot",
89+
"count": 1408
90+
},
91+
{
92+
"note": "jasmine",
93+
"count": 1400
94+
}
95+
]
96+
},
97+
{
98+
"name": "Asia",
99+
"countries": [
100+
"Japan",
101+
"South Korea",
102+
"India",
103+
"Thailand"
104+
],
105+
"count": 385,
106+
"families": {
107+
"floral": 727,
108+
"woody": 460,
109+
"citrus": 422,
110+
"spicy": 241,
111+
"fresh": 139,
112+
"sweet": 207,
113+
"musky": 377,
114+
"fruity": 207
115+
},
116+
"topNotes": [
117+
{
118+
"note": "musk",
119+
"count": 145
120+
},
121+
{
122+
"note": "bergamot",
123+
"count": 140
124+
},
125+
{
126+
"note": "sandalwood",
127+
"count": 123
128+
},
129+
{
130+
"note": "rose",
131+
"count": 119
132+
},
133+
{
134+
"note": "jasmine",
135+
"count": 118
136+
}
137+
]
138+
},
139+
{
140+
"name": "Middle East",
141+
"countries": [
142+
"UAE",
143+
"Oman",
144+
"Arabia saudi",
145+
"Bahrain",
146+
"Turkey"
147+
],
148+
"count": 1618,
149+
"families": {
150+
"floral": 2521,
151+
"woody": 2186,
152+
"citrus": 1422,
153+
"spicy": 1268,
154+
"fresh": 529,
155+
"sweet": 1098,
156+
"musky": 2134,
157+
"fruity": 856
158+
},
159+
"topNotes": [
160+
{
161+
"note": "musk",
162+
"count": 859
163+
},
164+
{
165+
"note": "amber",
166+
"count": 693
167+
},
168+
{
169+
"note": "vanilla",
170+
"count": 626
171+
},
172+
{
173+
"note": "patchouli",
174+
"count": 603
175+
},
176+
{
177+
"note": "sandalwood",
178+
"count": 596
179+
}
180+
]
181+
},
182+
{
183+
"name": "South America",
184+
"countries": [
185+
"Brazil",
186+
"Argentina"
187+
],
188+
"count": 1421,
189+
"families": {
190+
"floral": 2736,
191+
"woody": 2036,
192+
"citrus": 1748,
193+
"spicy": 1025,
194+
"fresh": 664,
195+
"sweet": 931,
196+
"musky": 1764,
197+
"fruity": 982
198+
},
199+
"topNotes": [
200+
{
201+
"note": "musk",
202+
"count": 868
203+
},
204+
{
205+
"note": "amber",
206+
"count": 674
207+
},
208+
{
209+
"note": "bergamot",
210+
"count": 663
211+
},
212+
{
213+
"note": "sandalwood",
214+
"count": 587
215+
},
216+
{
217+
"note": "cedar",
218+
"count": 510
219+
}
220+
]
221+
}
222+
],
223+
"families": [
224+
"floral",
225+
"woody",
226+
"citrus",
227+
"spicy",
228+
"fresh",
229+
"sweet",
230+
"musky",
231+
"fruity"
232+
]
233+
}

docs/index.html

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<a href="#section-ratings">Ratings</a>
2222
<a href="#section-timeline">Timeline</a>
2323
<a href="#section-price">Price</a>
24+
<a href="#section-geo">Geography</a>
2425
</div>
2526
</nav>
2627

@@ -218,13 +219,41 @@ <h2 class="section-title">The Full Picture</h2>
218219
<div class="viz-container viz-full-width" id="viz-heatmap"></div>
219220
</section>
220221

222+
<!-- Section 8: The Geography of Scent -->
223+
<section class="story-section" id="section-geo">
224+
<div class="section-intro">
225+
<span class="section-number">08</span>
226+
<h2 class="section-title">The Geography of Scent</h2>
227+
<p class="section-description">
228+
Perfume houses in Paris, New York, and Dubai draw on different olfactory traditions.
229+
How does composition vary across world regions?
230+
</p>
231+
</div>
232+
<div class="scrolly" id="scrolly-geo-radar">
233+
<div class="scrolly-graphic sticky">
234+
<div class="viz-container" id="viz-geo-radar"></div>
235+
</div>
236+
<div class="scrolly-steps">
237+
<div class="step" data-step="1">
238+
<p><strong>Europe</strong> leads with floral dominance — jasmine and rose are the continent's signatures. With over 15,000 perfumes, European houses set the global standard.</p>
239+
</div>
240+
<div class="step" data-step="2">
241+
<p><strong>North America</strong> overlaps heavily with Europe but leans slightly more fruity. American fragrance culture favors accessible, fresh compositions.</p>
242+
</div>
243+
<div class="step" data-step="3">
244+
<p>The <strong>Middle East</strong> stands apart: more woody, spicy, and musky. Oud-based compositions and resinous bases reflect a centuries-old olfactory tradition fundamentally different from the Western floral canon.</p>
245+
</div>
246+
</div>
247+
</div>
248+
</section>
249+
221250
<!-- Footer -->
222251
<footer class="footer">
223252
<div class="footer-content">
224253
<p class="footer-title">The Anatomy of Scent</p>
225254
<p class="footer-credits">
226255
A COM-480 Data Visualization project at EPFL<br>
227-
Alexandre Mourot &amp; Gaël Conde Losada
256+
Rayane Charif Chefchaouni, Gaël Conde Losada &amp; Alexandre Mourot
228257
</p>
229258
<p class="footer-data">
230259
Data sources:
@@ -247,6 +276,7 @@ <h2 class="section-title">The Full Picture</h2>
247276
<script src="js/visualizations/chord.js"></script>
248277
<script src="js/visualizations/sankey.js"></script>
249278
<script src="js/visualizations/heatmap.js"></script>
279+
<script src="js/visualizations/geo-radar.js"></script>
250280
<script src="js/main.js"></script>
251281
</body>
252282
</html>

docs/js/main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
215215
{ initFn: 'initChord', containerId: 'viz-chord', dataPath: 'data/chord_data.json', scrollyId: null },
216216
{ initFn: 'initSankey', containerId: 'viz-sankey', dataPath: 'data/sankey_data.json', scrollyId: null },
217217
{ initFn: 'initHeatmap', containerId: 'viz-heatmap', dataPath: 'data/accords_data.json', scrollyId: null },
218+
{ initFn: 'initGeoRadar', containerId: 'viz-geo-radar', dataPath: 'data/geo_data.json', scrollyId: 'scrolly-geo-radar' },
218219
];
219220

220221
function lazyInitViz(config) {

0 commit comments

Comments
 (0)