如何在geom_path

时间:2019-06-18 20:03:51

标签: r ggplot2

我正在尝试使用ggplot2中的geom_path来显示鸟类的运动,其中每只鸟类都有自己的路径。我想展示每条鸟类路径随时间变化的方式(即,路径的起点颜色较深,路径的末端较亮,反之亦然)。

到目前为止,我已经能够使用geom_path为每只鸟使用不同的彩色线条。但是,我似乎无法逐渐褪色或出现其他颜色变化以显示时间进度。

以下是我的数据示例:

datexample <- data.frame(
  "site" = c("A","B", "A", "B"), 
  "bird" = c("1A","2A"), 
  "week" = c(28, 28, 29, 29),
  "lat" =  c(45.25, 44.75, 45.25, 45.75), 
  "lon" = c(-61.75, -61.25, -62.75, -62.25)
)
datexample

这是该图的代码示例:

p = ggplot() +
  geom_path(data = datexample, aes(x = lon, y = lat, colour=bird))+
  coord_sf(crs = 4326, xlim = c(-58, -69), ylim = c(40, 48))+
  xlab("Longitude")+
  ylab("Latitude")+
  labs(color='Bird ID')
p

这是输出的样子: enter image description here

从本质上讲,我希望能够显示出在整个采样周中鸟类移动的路径(即哪个点排在第一,第二等)

我是R的新手,所以我们将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以通过几种方法在geom_path上指示方向。

一种可能是使用ggforce::geom_link2代替ggplot2::geom_path,从而允许沿路径的长度逐渐着色。在这里,我添加了一个“ progress”变量,该变量显示了每只鸟沿着其总路径的距离,然后将其映射到alpha(透明度)。 geom_link2在路径内创建细分,以允许在路径的每个分段内逐渐消失。

library(dplyr)
p = ggplot() +
  ggforce::geom_link2(data = datexample %>% 
                       group_by(bird, site) %>%
                       mutate(progress = row_number()/n()),
            aes(x = lon, y = lat, colour=bird, alpha = progress))+
  coord_sf(crs = 4326, xlim = c(-58, -69), ylim = c(40, 48))+
  xlab("Longitude")+
  ylab("Latitude")+
  labs(color='Bird ID')
p

enter image description here

或者,您可以添加箭头:

enter image description here

p = ggplot() +
  geom_path(data = datexample, 
            aes(x = lon, y = lat, colour=bird), 
            arrow = arrow(type = "closed", length = unit(0.03, "npc")))+
  coord_sf(crs = 4326, xlim = c(-58, -69), ylim = c(40, 48))+
  xlab("Longitude")+
  ylab("Latitude")+
  labs(color='Bird ID')
p