Посмотрите, можете ли вы применить это к своим данным.
Я предположил, что для целей графического представления не важно, чтобы годы рассматривались как «временные» данные.
library(tidyr)
library(dplyr)
library(stringr)
library(ggplot2)
library(ggrepel)
pop <- tibble(city = c("Delhi", "Madurai", "Cape Town", "Jo Burg"),
`1990` = c(10, 12, 5, 6),
`2000` = c(13, 17, 7, 8),
`2015` = c(20, 24, 7.5, 9),
km2_1990 = c(12, 15, 2, 4),
km2_2000 = c(13, 14, 3, 4),
km2_2015 = c(15, 16, 5, 6))
cont <- tibble(city = c("Delhi", "Madurai", "Cape Town", "Jo Burg"),
cont = c("Asia", "Asia", "Africa", "Africa"))
tib <-
pop %>%
pivot_longer(cols = `1990`:km2_2015, names_to = "year", values_to = "val") %>%
mutate(type = case_when(str_detect(year, "km") ~ "area",
TRUE ~ "pop"),
year = as.numeric(str_remove(year, "km2_"))) %>%
pivot_wider(names_from = type, values_from = val) %>%
left_join(cont) %>%
group_by(year, cont) %>%
summarise(area = sum(area),
pop = sum(pop)) %>%
group_by(cont) %>%
mutate(lab_cont = case_when(pop == max(pop)~cont,
TRUE ~ ""))
ggplot(tib, aes(area, pop, label = lab_cont))+
geom_line(aes(group = cont), colour = "red")+
geom_point(fill = "red", colour = "red", shape = 22, size = 4)+
geom_text_repel(aes(label = year))+
geom_text_repel(nudge_x = 1, size = 5)
Это дает вам следующий график, вы можете отрегулировать аргументы так, как требуется, чтобы настроить внешний вид в соответствии с вашими целями: