Временные ряды, связанные разбросом графика в R (как на картинке) - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу построить эти данные enter image description here как связанный график временного разброса в R. Любой намек / код был бы очень полезен. Я могу сделать с одним, но не с одним временным рядом. enter image description here

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Преобразуйте свои данные следующим образом

enter image description here

Затем постройте график, используя пакет ggplot2.

mydata %>%
  ggplot(aes(x=bsurf, y=pop, group=city, color=city, dlabel=year)) + geom_point(,size = 2)+
  geom_line(size=1)+ geom_text(label=mydata$year, vjust = 1.2, nudge_y = 0.5)+
  ggtitle("Dummy Title", subtitle = "Dummy") + xlab("Population") + ylab("Total Built-up Surface")

enter image description here

1 голос
/ 18 апреля 2020

Посмотрите, можете ли вы применить это к своим данным.

Я предположил, что для целей графического представления не важно, чтобы годы рассматривались как «временные» данные.

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)

Это дает вам следующий график, вы можете отрегулировать аргументы так, как требуется, чтобы настроить внешний вид в соответствии с вашими целями:

enter image description here

...