Карта численности видов с помощью ggmap -> Как правильно настроить sice точек - PullRequest
0 голосов
/ 03 марта 2019

Я хочу создать карту с помощью ggmap, где вы сможете увидеть, какие виды были найдены, где и сколько раз.«Сколько» должно быть представлено размером точки / пузыря.Но я мог бы представить, что представление по цвету (например, тепловая карта) также будет хорошо, а затем разделение видов путем формирования точек.Что у меня так далеко: Для фоновой карты:

B<-get_map(location = c(lon = -56.731405, lat =-61.4831206),
           zoom = 6, 
           scale = "auto",
           maptype = c("terrain"),
           source = c("google"))

Для точечного графика:

D<-ggmap(B) + 
geom_point(data=Anatomy,
aes(x=Anatomy$Longitude,y=Anatomy$Latitude,
color=Species,
size=??) +
scale_size_continuous(range=c(1,12))

Мои данные = Анатомия выглядит так:

  Species Lat Long Station
1       A  50   60       I
2       A  50   60       I
3       A  40   30      II
4       B  50   60       I
5       B  40   30      II
6       C  50   60       I
7       C  10   10     III
8       C  10   10     III
9       C  40   30      II

Моя идея состояла в том, чтобы использовать dplyr и фильтровать по строкам и каким-то образом суммировать категории.Или что вы думаете?И как вы думаете, это лучший способ представить эти данные?

1 Ответ

0 голосов
/ 03 марта 2019

добро пожаловать в StackOverflow!Чтобы помочь людям помочь вам, вы должны приложить воспроизводимый пример .Вот, например, небольшой фрагмент кода для ваших данных:

library(tidyverse)
Anatomy <- tribble(~Species,  ~Lat, ~Long, ~Station,
                "A",  50,   60,       "I",
                "A",  50,   60,       "I",
                "A",  40,   30,      "II",
                "B", 50,   60,       "I",
                "B",  40,   30,      "II") 

Есть несколько проблем с вашими данными / кодом:

  • проекция: вам, скорее всего, придется перепроектироватьданные.Просто глядя на координаты, ваши точки 50, 60, в то время как карта показывает -50, -60.Найдите проекцию и используйте, например, st_transform из пакета sf
  • цитирование переменных: вам не нужно снова вызывать фрейм данных, как в Anatomy$Latitude.Просто используйте Latitude.Плюс latitude на самом деле lat в ваших данных!?
  • агрегация: я бы предложил просто использовать функцию count(), чтобы увидеть количество наблюдений на станцию.

Вот кусок кода.Заметьте, я просто повернул (60, 50) к (-60, -50), что явно неверно!

library(ggmap)
#> Loading required package: ggplot2
#> Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
#> Please cite ggmap if you use it! See citation("ggmap") for details.
library(tidyverse)

B<-get_map(location = c(lon = -56.731405, lat =-61.4831206),
           zoom = 6, 
           scale = "auto",
           maptype = c("terrain"),
           source = c("google"))

library(tidyverse)
Anatomy <- tribble(~Species,  ~Lat, ~Long, ~Station,
                "A",  50,   60,       "I",
                "A",  50,   60,       "I",
                "A",  40,   30,      "II",
                "B", 50,   60,       "I",
                "B",  40,   30,      "II") 

Anatomy_clean <- Anatomy %>% 
  mutate_at(c("Lat", "Long"), funs(-1*.)) %>% 
  count(Species, Lat, Long, Station)
#> Warning: funs() is soft deprecated as of dplyr 0.8.0
#> please use list() instead
#> 
#> # Before:
#> funs(name = f(.)
#> 
#> # After: 
#> list(name = ~f(.))
#> This warning is displayed once per session.


ggmap(B) + 
  geom_point(data=Anatomy_clean,
             aes(x= Lat,y=Long, color=Species, size= n)) +
  scale_size_continuous(range=c(1,12))
#> Warning: Removed 2 rows containing missing values (geom_point).

...