forked from the-graph-courses/rmc_life_satisfaction_webpage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.qmd
167 lines (122 loc) · 5.58 KB
/
index.qmd
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
---
title: "Self-reported life satisfaction, 2011 to 2023"
subtitle: "Replicating the Our World in Data Grapher"
author: "YOUR NAME HERE" # Remember to add your name!
date: "16-10-2024"
theme: united
---
<!-- Custom HTML to add logo [DO NOT EDIT THIS SECTION] -->
<img src="Our_World_in_Data_logo.png" style="position:absolute; top:0; right:0; padding:10px;" width="146"/>
<!-- Custom font and style of page [DO NOT EDIT THIS SECTION] -->
<link href='https://fonts.googleapis.com/css?family=Playfair Display' rel='stylesheet'>
```{=html}
<style>
h1 {
font-family: Playfair Display, Georgia, Times New Roman, "Liberation Serif", serif;
}
</style>
```
```{r include = F}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
# Load packages
if(!require(pacman)) install.packages("pacman")
pacman::p_load(plotly, tidyverse, reactable, here, scales)
```
```{r}
## Import data
cantril <-
read_csv(here("data/happiness-cantril-ladder.csv")) %>%
rename(Country = Entity)
```
### Happiness across the world over time
The World Happiness Report is a well-known source of cross-country data on self-reported life satisfaction, collected by the Gallup World Poll. The visualizations below present the ‘happiness scores’ for each country, published these reports.
The main life evaluation question asked in the poll is the Cantril Life Ladder question:
> “Please imagine a ladder, with steps numbered from 0 at the bottom to 10 at the top. The top of the ladder represents the best possible life for you and the bottom of the ladder represents the worst possible life for you. On which step of the ladder would you say you personally feel you stand at this time?”
## 🔢 Table
**Average self-reported life satisfaction** – Cantril Ladder score (0=worst; 10=best)
```{r}
# In this tab, you will create a table similar to the one on the Our World in Data page. The table should have the following columns:
# Country, `2011`, `2023`, Absolute change, and Relative change.
# Create table
"WRITE_YOUR_CODE_HERE"
```
## 🌎 Map
The map plots the average answer that survey respondents provided to this question in different countries. As with the steps of the ladder, values in the map range from 0 to 10.
```{r}
# This code is already done for you. You don't need to change anything here. If you change any of the column names, or something else with the data, you may need to adjust the code below.
# Make boundaries light grey
l <- list(color = toRGB("grey"), width = 0.5)
# Specify map projection/options
g <- list(
showframe = FALSE,
coastlinecolor = "grey", # Set coastline color
coastlinewidth = 0.5, # Set coastline width
projection = list(type = 'Mercator')
)
# Create choropleth map
cantril %>%
mutate(`Cantril ladder score` = round(`Cantril ladder score`, 2)) %>%
plot_geo(width = 940) %>%
add_trace(
z = ~`Cantril ladder score`,
color = ~`Cantril ladder score`,
zmin = 0, # Set minimum value for color scale
zmax = 10, # Set maximum value for color scale
locations = ~Code,
text = ~Country,
frame = ~Year, colors = "YlGn",
marker = list(line = l)
) %>%
colorbar(title = "Ladder Score",
tickvals = seq(0, 10, by = 2),
ticktext = seq(0, 10, by = 2)) %>%
layout(geo = g)
```
## 📈 Simple Chart
```{r}
# In this tab, create a simple line chart of the Cantril score over time for a few countries, similar to the one on the Our World in Data page.
# Note that your chart will not have the ability to filter countries like the one on the Our World in Data page.
# Create line chart
"WRITE_YOUR_CODE_HERE"
```
## 📈 Advanced Chart
One problem with the simple chart on the previous tab is that the countries are fixed. It would be better if the user could select the countries they want to see. This is not possible with `plotly` alone, but with the `crosstalk` package and some custom JavaScript, we can achieve this, as demonstrated below.
This is simply a demonstration for you, you do not need to work on this for your assignment. You may want to come back to this when you need such functionality in your own projects.
For more information on how we achieved this, see [this Stack Overflow question](https://stackoverflow.com/questions/67058016/how-to-set-default-values-in-filter-select-in-crosstalk-in-r-plotly).
```{r}
pacman::p_load(crosstalk, plotly)
# Crosstalk shared data object
# This allows the filter to interact with the plot
shared_cantril_data <- highlight_key(cantril)
cantril_plotly <- plot_ly(
shared_cantril_data,
x = ~Year,
y = ~`Cantril ladder score`,
color = ~Country,
type = "scatter",
mode = "lines+markers"
) %>%
layout(yaxis = list(range = c(0, 10)))
country_filter <- filter_select(
"country_filter",
"Select a country to examine",
shared_cantril_data,
~Country,
multiple = TRUE
)
# Output the filter and the plot
bscols(
list(country_filter, cantril_plotly)
)
```
<!-- Custom javascript to set default values in the filter: -->
<script>
function filter_default() {
var default_countries = ["Norway", "Australia", "Germany", "Bolivia", "Colombia", "Bhutan"]; // Set default countries here
document.getElementById("country_filter").getElementsByClassName("selectized")[0].selectize.setValue(default_countries, false);
}
window.onload = filter_default;
</script>
# {.unlisted}
Data source: World Happiness Report
[OurWorldInData.org/happiness-and-life-satisfaction](https://ourworldindata.org/grapher/happiness-cantril-ladder) | CC BY