#Nama: Putri Alika Salsabila #NIM: 16231048 #Tugas PSD B
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.2
## Warning: package 'forcats' was built under R version 4.4.2
## Warning: package 'lubridate' was built under R version 4.4.2
In September 2019, YouGov survey asked 1,639 GB adults the following question:
In hindsight, do you think Britain was right/wrong to vote to leave EU?
- Right to leave
- Wrong to leave
- Don’t know
The data from the survey are in data/brexit.csv.
brexit <- read_csv("data/brexit.csv")
In the course video we made the following visualisation.
brexit <- brexit %>%
mutate(
region = fct_relevel(region, "london", "rest_of_south", "midlands_wales", "north", "scot"),
region = fct_recode(region, London = "london", `Rest of South` = "rest_of_south", `Midlands / Wales` = "midlands_wales", North = "north", Scotland = "scot")
)
ggplot(brexit, aes(y = opinion, fill = opinion)) +
geom_bar() +
facet_wrap(~region, nrow = 1, labeller = label_wrap_gen(width = 12)) +
guides(fill = FALSE) +
labs(
title = "Was Britain right/wrong to vote to leave EU?",
subtitle = "YouGov Survey Results, 2-3 September 2019",
caption = "Source: bit.ly/2lCJZVg",
x = NULL, y = NULL
) +
scale_fill_manual(values = c(
"Wrong" = "#ef8a62",
"Right" = "#67a9cf",
"Don't know" = "gray"
)) +
theme_minimal()
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
In this application exercise we tell different stories with the same data.
Add scales = "free_x" as an argument to the
facet_wrap() function. How does the visualisation change?
How is the story this visualisation telling different than the story the
original plot tells?
ggplot(brexit, aes(y = opinion, fill = opinion)) +
geom_bar() +
facet_wrap(~region,
nrow = 1, labeller = label_wrap_gen(width = 12),
scales = "free_x"
) +
guides(fill = FALSE) +
labs(
title = "Was Britain right/wrong to vote to leave EU?",
subtitle = "YouGov Survey Results, 2-3 September 2019",
caption = "Source: bit.ly/2lCJZVg",
x = NULL, y = NULL
) +
scale_fill_manual(values = c(
"Wrong" = "#ef8a62",
"Right" = "#67a9cf",
"Don't know" = "gray"
)) +
theme_minimal()
First, calculate the proportion of wrong, right, and don’t know answers in each category and then plot these proportions (rather than the counts) and then improve axis labeling. How is the story this visualisation telling different than the story the original plot tells? Hint: You’ll need the scales package to improve axis labeling, which means you’ll need to load it on top of the document as well.
# Load necessary packages
library(ggplot2)
library(dplyr)
library(forcats)
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
# Memodifikasi data region
brexit <- brexit %>%
mutate(
region = fct_relevel(region, "london", "rest_of_south", "midlands_wales", "north", "scot"),
region = fct_recode(region, London = "london", `Rest of South` = "rest_of_south",
`Midlands / Wales` = "midlands_wales", North = "north", Scotland = "scot")
)
## Warning: There were 2 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `region = fct_relevel(...)`.
## Caused by warning:
## ! 5 unknown levels in `f`: london, rest_of_south, midlands_wales, north, and scot
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
# Menghitung proporsi jawaban dalam setiap wilayah
brexit_prop <- brexit %>%
group_by(region, opinion) %>%
summarise(count = n(), .groups = "drop") %>%
group_by(region) %>%
mutate(proportion = count / sum(count))
# Membuat plot dengan facet wrap
ggplot(brexit_prop, aes(x = opinion, y = proportion, fill = opinion)) +
geom_bar(stat = "identity") +
facet_wrap(~region) +
scale_y_continuous(labels = percent_format()) +
labs(
title = "Was Britain right/wrong to vote to leave EU?",
subtitle = "YouGov Survey Results, 2-3 September 2019",
caption = "Source: bit.ly/2lCJZVg",
x = NULL, y = NULL
) +
scale_fill_manual(values = c(
"Wrong" = "#ef8a62",
"Right" = "#67a9cf",
"Don't know" = "gray"
)) +
theme_minimal() +
theme(
legend.position = "bottom",
legend.title = element_text(face = "bold")
)
#Soal nomor 2 lebih fokus melihat opini dalam setiap wilayah
Recreate the same visualisation from the previous exercise, this time dodging the bars for opinion proportions for each region, rather than faceting by region and then improve the legend. How is the story this visualisation telling different than the story the previous plot tells?
# Load necessary packages
library(ggplot2)
library(dplyr)
library(forcats)
library(scales)
# Memodifikasi data region
brexit <- brexit %>%
mutate(
region = fct_relevel(region, "london", "rest_of_south", "midlands_wales", "north", "scot"),
region = fct_recode(region, London = "london", `Rest of South` = "rest_of_south",
`Midlands / Wales` = "midlands_wales", North = "north", Scotland = "scot")
)
## Warning: There were 2 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `region = fct_relevel(...)`.
## Caused by warning:
## ! 5 unknown levels in `f`: london, rest_of_south, midlands_wales, north, and scot
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
# Menghitung proporsi
brexit_prop <- brexit %>%
group_by(region, opinion) %>%
summarise(count = n(), .groups = "drop") %>%
group_by(region) %>%
mutate(proportion = count / sum(count))
# Membuat plot dengan dodge untuk membandingkan antar-wilayah
ggplot(brexit_prop, aes(x = region, y = proportion, fill = opinion)) +
geom_bar(stat = "identity", position = "dodge") +
scale_y_continuous(labels = percent_format()) +
labs(
title = "Was Britain right/wrong to vote to leave EU?",
subtitle = "YouGov Survey Results, 2-3 September 2019",
caption = "Source: bit.ly/2lCJZVg",
x = NULL, y = NULL
) +
scale_fill_manual(values = c(
"Wrong" = "#ef8a62",
"Right" = "#67a9cf",
"Don't know" = "gray"
)) +
theme_minimal() +
theme(
legend.position = "bottom",
legend.title = element_text(face = "bold")
)
#Soal nomor 3 lebih fokus membandingkan opini antar-wilayah