ipu_download <- "compare--statutory_members_number--2024--export--241118-011132--EN.csv"
if (file.exists(ipu_download)) {
dat <- read.csv(ipu_download) |>
filter(Status != "Suspended") |>
dplyr::select(iso2c = ISO.Code,
Members = Statutory.number.of.members,
Chamber.type) |>
mutate(Chamber.type = ifelse(Chamber.type == "-",
"Lower chamber",
as.character(Chamber.type))) |>
pivot_wider(names_from = Chamber.type,
values_from = Members) |>
as.data.frame()
} else {
dat <- structure(list(iso2c = c("AL", "DZ", "AD", "AO", "AG", "AR",
"AM", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ",
"BJ", "BT", "BO", "BA", "BW", "BR", "BN", "BG", "BF", "BI", "CV",
"KH", "CM", "CA", "CF", "TD", "CL", "CN", "CO", "KM", "CG", "CR",
"CI", "HR", "CU", "CY", "CZ", "KP", "CD", "DK", "DJ", "DM", "DO",
"EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FJ", "FI", "FR",
"GA", "GM", "GE", "DE", "GH", "GR", "GD", "GT", "GN", "GW", "GY",
"HT", "HN", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IL", "IT",
"JM", "JP", "JO", "KZ", "KE", "KI", "KW", "KG", "LA", "LV", "LB",
"LS", "LR", "LY", "LI", "LT", "LU", "MG", "MW", "MY", "MV", "ML",
"MT", "MH", "MR", "MU", "MX", "FM", "MC", "MN", "ME", "MA", "MZ", "NA",
"NR", "NP", "NL", "NZ", "NI", "NE", "NG", "MK", "NO", "OM", "PK",
"PW", "PA", "PG", "PY", "PE", "PH", "PL", "PT", "QA", "KR", "MD",
"RO", "RU", "RW", "KN", "LC", "VC", "WS", "SM", "ST", "SA", "SN",
"RS", "SC", "SL", "SG", "SK", "SI", "SB", "SO", "ZA", "SS", "ES",
"LK", "SR", "SE", "CH", "SY", "TJ", "TH", "TL", "TG", "TO", "TT",
"TN", "TR", "TM", "TV", "UG", "UA", "AE", "GB", "TZ", "US", "UY",
"UZ", "VU", "VE", "VN", "YE", "ZM", "ZW"), `Lower chamber` = c(140L,
407L, 28L, 220L, 18L, 257L, 107L, 151L, 183L, 125L, 39L, 40L, 350L,
30L, 110L, 150L, 32L, 109L, 47L, 130L, 42L, 69L, 513L, 45L, 240L, 71L,
123L, 72L, 125L, 180L, 338L, 140L, 203L, 155L, 3000L, 187L, 24L, 151L,
57L, 255L, 151L, 470L, 80L, 200L, 687L, 500L, 179L, 65L, 32L, 190L,
137L, 596L, 60L, 100L, 150L, 101L, 74L, 547L, 55L, 200L, 577L, 98L,
58L, 150L, 598L, 275L, 300L, 15L, 160L, 81L, 102L, 69L, 119L, 128L,
199L, 63L, 545L, 580L, 290L, 329L, 160L, 120L, 400L, 63L, 465L, 138L,
98L, 350L, 45L, 65L, 90L, 164L, 100L, 128L, 122L, 73L, 200L, 25L,
141L, 60L, 163L, 193L, 223L, 93L, 147L, 65L, 33L, 176L, 66L, 500L,
14L, 24L, 126L, 81L, 395L, 250L, 104L, 19L, 275L, 150L, 120L, 91L,
171L, 360L, 123L, 169L, 90L, 336L, 16L, 71L, 118L, 80L, 130L, 316L,
460L, 230L, 45L, 300L, 101L, 330L, 450L, 80L, 16L, 18L, 22L, 51L, 60L,
55L, 151L, 165L, 250L, 35L, 149L, 104L, 150L, 90L, 50L, 275L, 400L,
550L, 350L, 225L, 51L, 349L, 200L, 250L, 63L, 500L, 65L, 113L, 30L,
42L, 161L, 600L, 125L, 16L, 529L, 450L, 40L, 650L, 393L, 435L, 99L,
150L, 52L, 167L, 500L, 301L, 167L, 280L), `Upper chamber` = c(NA,
174L, NA, NA, 17L, 72L, NA, 76L, 60L, NA, 16L, 40L, NA, 21L, 65L, 60L,
13L, NA, 25L, 36L, 15L, NA, 81L, NA, NA, NA, 39L, NA, 62L, 100L, 105L,
NA, NA, 50L, NA, 108L, NA, 72L, NA, 99L, NA, NA, NA, 81L, NA, 109L,
NA, NA, NA, 32L, NA, 300L, NA, 70L, NA, NA, 30L, 153L, NA, NA, 348L,
70L, NA, NA, 69L, NA, NA, 13L, NA, NA, NA, NA, 30L, NA, NA, NA, 245L,
NA, NA, NA, 60L, NA, 205L, 21L, 248L, 69L, 50L, 68L, NA, NA, NA, NA,
NA, NA, 33L, 30L, NA, NA, NA, NA, 18L, NA, 70L, NA, NA, NA, NA, NA,
NA, 128L, NA, NA, NA, NA, 120L, NA, 42L, NA, 59L, 75L, NA, NA, NA,
109L, NA, NA, 87L, 96L, 15L, NA, NA, 45L, NA, 24L, 100L, NA, NA, NA,
NA, 136L, 170L, 26L, NA, 11L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 40L, NA, 54L, 90L, 100L, 265L, NA, NA, NA, 46L, NA, 33L, 200L, NA,
NA, NA, 32L, 77L, NA, NA, NA, NA, NA, NA, 800L, NA, 100L, 31L, 100L,
NA, NA, NA, 111L, NA, 80L)),
row.names = c(NA, -190L),
class = "data.frame")
}
### Let's drop the 3,000 member chamber
dat <- dat |>
filter(`Lower chamber` < 3000)
ggplot(dat,
aes(x = `Lower chamber`,
y = `Upper chamber`)) +
geom_point(colour = "#ebebeb") +
geom_smooth(formula = y ~ x,
method = "lm",
linetype = 2,
color = "#df691a") +
scale_x_continuous(limits = c(0, 700),
expand = expansion(c(0, 0.05))) +
scale_y_continuous(limits = c(0, 800),
expand = expansion(c(0, 0.05))) +
### geom_abline(color = "#df691a") +
geom_textabline(color = "#df691a",
label = "Upper chamber size equals Lower chamber size") +
annotate(geom = "point",
size = 1.5,
x = 88,
y = 44,
colour = "#5cb85c") +
annotate(geom = "text",
x = 88,
y = 144,
hjust = 1,
vjust = 0,
label = "Victoria\nLeg. Council",
colour = "#5cb85c") +
annotate(geom = "curve",
x = 48,
y = 140,
xend = 88 + 1,
yend = 44 - 1,
hjust = 1,
vjust = 0,
arrow = arrow(length = unit(0.01, "npc")),
colour = "#5cb85c") +
theme_dark() +
theme(plot.background = element_rect(fill = "#0f2537",
colour = NA),
panel.background = element_rect(fill = "#2b3e50"),
text = element_text(colour = "#ebebeb"),
axis.text = element_text(colour = "#ebebeb"))