добавление легенды в ggmap с позициями geom_point из разных наборов данных - PullRequest
0 голосов
/ 25 апреля 2018

Я наносил на карту два набора позиционных данных с geom_point из разных наборов данных (MR + MRTag).

MR
detect_date        Latitude      Longitude    species
12/04/2016 11:08    -6.6524      71.3475      Manta Ray
12/04/2016 11:09    -6.6524      71.3475      Manta Ray
12/04/2016 11:10    -6.6524      71.3475      Manta Ray
16/04/2016 21:27    -6.6524      71.3475      Manta Ray

MRTag
species    taggingdate   deploy_lat  deploy_lon
Manta Ray   3/24/2016   -5.4191      71.83855
Manta Ray   02/05/2013  -5.2568      71.65768333
Manta Ray   02/07/2013  -5.33448     71.9812
Manta Ray   02/08/2013  -5.3046      71.94231667

Затем я использовал приведенный ниже код для создания базовой карты

library(ggmap)

MR_bbox <- make_bbox(lon = MR$Longitude, lat = MR$Latitude, f=1)
MR_map <- get_map(location = MR_bbox, source = "google", maptype = "satellite")

Затем нанесли данные о моем местонахождении от Mr + MRTag на карту

  MR_plot <-
    ggmap(MR_map) + 
     geom_point(data = MR, mapping = aes(x = Longitude, y = Latitude), 
        shape = 1, color = "white") +
     geom_point(data = MRTag, mapping = aes(x = deploy_lon, y = deploy_lat),
       shape = 25, fill = "#00FF00", color = "#00FF00") +
     xlab("Longitude") + 
     ylab("Latitude")

Это дало мне этот сюжет

enter image description here

Я хотел бы добавить легенду для двух фигур на карту, но я не уверен, что это лучший способ сделать это, и методы до сих пор не работали

1 Ответ

0 голосов
/ 25 апреля 2018

Решение на самом деле очень простое: просто перенесите соответствующие эстетические аргументы в aes().

MR_plot <- ggmap(MR_map) + 
    geom_point(data = MR, aes(x = Longitude, y = Latitude,
                              color = 'detect', shape = 'detect', fill = 'detect')) +
    geom_point(data = MRTag, aes(x = deploy_lon, y = deploy_lat,
                                 color = 'tag', shape = 'tag', fill = 'tag')) +
    xlab("Longitude") + 
    ylab("Latitude") +
    scale_color_manual(name = 'legend', values = c(detect = 'white', tag = '#00FF00')) +
    scale_fill_manual(name = 'legend', values = c(detect = NA, tag = '#00FF00')) +
    scale_shape_manual(name = 'legend', values = c(detect = 1, tag = 25))

Это на самом деле немного сбивает с толку: если вы используете color= за пределами aes(), тогда вы устанавливаете фактический цвет этих точек, и нет легенды, потому что это чисто эстетический выбор.

Если вы используете color= (или fill= или shape=) внутри aes(), то, однако, вы определяете другую переменную, которая контролирует цвет точек. Например, если вы хотите раскрасить эти точки в зависимости от вида, ваш aes() будет: aes(x = Longitude, y = Latitude, color = species). Это то же самое: за исключением того, что, передав одну строку, вы устанавливаете переменную цвета для всех точек в этом geom_point в одно значение.

Затем вам нужно использовать функцию scale_color_* (и соответствующие функции для заливки и формы), чтобы установить для этих цветовых переменных нужные вам цвета. По умолчанию каждый масштаб, определенный в aes(), получит собственную легенду. Но если вы назовете легенды и дадите им одно и то же имя, они будут объединены в одну.

...