Как перекрыть несколько карт в одну? - PullRequest
0 голосов
/ 05 ноября 2019

Я создал 9 различных карт мира с помощью ggplot2 со следующим кодом, где каждая из них отличается от другой и показывает распределение каждой из девяти переменных на глобальном уровне. Обратите внимание, что каждый пиксель может быть «идентифицирован» только по одной переменной:

    ggplot(aes(x = lat, y = lon), data = DF )+geom_tile(aes(fill = "Var1"))+ 
  geom_polygon(aes(x = long, y = lat, group = group),
               data = map_data('world'),
               fill = NA, color = "#515151",
               size = 0.15) + scale_colour_discrete(drop = TRUE) + country_shapes

Теперь я хочу наложить на каждый из них итоговую карту. Но не могу понять, как это сделать. Любые предложения?

введите описание изображения здесь

РЕДАКТИРОВАТЬ здесь манекен df:

structure(list(lat = c(154.7916667, 154.7083333, 153.9583333, 
152.125, 150.0416667, 150.0416667), lon = c(49.54166667, 49.29166667, 
48.95833333, 47.04166667, -22.20833333, -22.29166667), Var1 = c(0, 
0, 0, 0, 1.453369498, 1.458679557), Var2 = c(0.154323816, 0.210961819, 
0, 0.173637688, 0, 0), Var3 = c(0, 0, 0, 0, 0, 0), Var4 = c(0, 
0, 0, 0, 0, 0), Var5 = c(0L, 0L, 0L, 0L, 0L, 0L), Var6 = c(0L, 
0L, 0L, 0L, 0L, 0L), Var7 = c(0, 0, 0, 0, 0, 0), Var8 = c(0L, 
0L, 0L, 0L, 0L, 0L), Var9 = c(0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
6L), class = "data.frame")

1 Ответ

0 голосов
/ 05 ноября 2019

РЕДАКТИРОВАТЬ

library(tidyr)
dat_l <- tidyr::gather(dat, variable, value, Var1:Var9)

Если 0 означает, что для переменной нет данных, просто удалите нули

 dat_l <- dat_l %>% dplyr::filter(value != 0)
 unique(dat_l$variable)
 "Var1" "Var2"

После удаления всех нулей яЯ остался только с Var1 и Var2. Итак,

  library(ggthemes)
  library(ggplot2)

  ggplot() +
  geom_point(data = dat_l , aes(x = lon, y = lat, col = factor(variable))) + 
  theme_map() + coord_equal() + 
  geom_path(data = map_data('world'), aes(long, lat, group = group), col = 
  'black') + 
   theme(legend.position = 'top', legend.title = element_blank()) 

enter image description here

Я попытался воссоздать структуру ваших данных, насколько я понимаю, и объединил их в один длинный кадр данных. my.dfниже будет уникальный lon lat и значение для 10 переменных от 'var1' до 'var10'.

  library(data.table)
  tempList <- list()
  for(i in 1:10){

    temp <- as.data.frame(cbind(runif(10,-10.85, 20.02),runif(10, 49.82,59.47)))
    temp$var <- paste0('var',i)
    temp$value <- i
    tempList[[i]] <- temp
  }

  my.df <- rbindlist(tempList)
  names(my.df)[1:2] <- c('lon', 'lat')

Если вы посмотрите на my.df, вы увидите, что у него есть случайный лат и каждый длинныйимеет только одно значение var, которое варьируется от 1 до 9. Это просто длинный фрейм данных, который объединил ваши индивидуальные фреймы данных по строкам. Затем я строю график, используя ggplot, как показано ниже

  library(ggthemes)
  library(ggplot2)

  ggplot() +
  geom_point(data = my.df , aes(x = lon, y = lat, col = factor(value))) + 
  theme_map() + coord_equal() + 
  geom_path(data = map_data('world'), aes(long, lat, group = group), col = 'black') + 
  theme(legend.position = 'top', legend.title = element_blank()) 

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...