使用来自不同数据集的geom_point位置向ggmap添加图例

时间:2018-04-25 08:19:23

标签: r legend ggmap

我一直在使用不同数据集(MR + MRTag)的geom_point绘制两组位置数据。

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 :(得分:0)

解决方案实际上非常简单:只需将相关的美学论点移到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()中定义的每个比例都会获得它自己的图例。但如果你给这些图例命名并给它们命名,那么它们就会合并成一个。