library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggrepel)
library(ggsci)
Data from Pickering, S. D., & Tanaka, S. (2025). A taste for deprivation? Fish, chips and leaving the European Union. Geoforum, 104236, available here.
dat <- read.csv("fish_chips_brexit.csv")
head(dat)
dat_to_label <- dat |>
filter((FishandChipShopsandRestaurantsPercent > 15 & brexitPercent < 30) |
FishandChipShopsandRestaurantsPercent == max(FishandChipShopsandRestaurantsPercent)
)
dat |>
ggplot() +
aes(
x = FishandChipShopsandRestaurantsPercent,
y = brexitPercent,
colour = country,
group = country
) +
geom_point(size = .7) +
labs(
x = "Percentage of fish and chip shops",
y = "Percentage of people voting Leave",
colour = "Country",
title = "Fish and chips and Brexit",
caption = "Reanalysis of constituency-level data compiled by Pickering and Tanaka (2025)"
) +
geom_text_repel(
data = dat_to_label,
aes(label = cName),
size = 3.5,
box.padding = unit(1, "lines"),
point.padding = unit(.4, "lines"),
show.legend = F,
min.segment.length = 0,
arrow = arrow(length = unit(0.015, "npc"))
) +
geom_smooth(
se = FALSE,
span = 1,
method = "loess",
formula = y ~ x
) +
theme_grey() +
scale_color_npg()