使路径从geom_path开放

时间:2018-11-22 14:01:02

标签: r ggplot2 rgdal maptools

我正在使用geom_path在海岸线地图上绘制数据,并且无法删除链接第一个和最后一个数据点的线。数据集非常大,但可以找到here

已报告此问题,并已在this thread上解决了该问题,尽管对我而言没有帮助。

LHplot <- ggplot(data = LH, aes(x = long, y = lat, group=group)) +
  geom_path(aes(group=group), size = 1, color = "darkgrey") + 
  theme_bw() +
  theme(axis.line.y=element_blank(),
    axis.line.x = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    panel.grid.major = element_blank(), # switch off major gridlines
    panel.grid.minor = element_blank(), # switch off minor gridlines
    panel.border = element_blank(),
    text=element_text(family="Times New Roman", size=11)
  )
LHplot

enter image description here

我还注意到,在绘制数据子集时,路径可能是开放的

LH2 <- LH[1:16000,]
LH2plot <- ggplot(data = LH2, aes(x = long, y = lat, group=group)) +
  geom_path(aes(group=group), size = 1, color = "darkgrey") + 
  theme_bw() +
  theme(axis.line.y=element_blank(),
    axis.line.x = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    panel.grid.major = element_blank(), # switch off major gridlines
    panel.grid.minor = element_blank(), # switch off minor gridlines
    panel.border = element_blank(),
    text=element_text(family="Times New Roman", size=11)
  )
LH2plot

enter image description here

LH2 <- LH[1:50000,]
LH2plot <- ggplot(data = LH2, aes(x = long, y = lat, group=group)) +
  geom_path(aes(group=group), size = 1, color = "darkgrey") + 
  theme_bw() +
  theme(axis.line.y=element_blank(),
    axis.line.x = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    panel.grid.major = element_blank(), # switch off major gridlines
    panel.grid.minor = element_blank(), # switch off minor gridlines
    panel.border = element_blank(),
    text=element_text(family="Times New Roman", size=11)
  )
LH2plot

enter image description here

问题是否来自数据集中的空白?还是只是它在数据框中的组织方式以及geom_path如何读取它?

修改

从下面的评论中:我按纬度对数据进行排序,以绘制从南到北的路径:

LH <- LH[order(LH$lat),]

解决了线路问题,但又产生了另一个问题: enter image description here

1 个答案:

答案 0 :(得分:1)

问题在于您的大陆海岸线不是从一端开始,而是到另一端,而是从中间开始。

第一件事是识别跳跃。在下面,我仅使用纬度来识别它,但是如果需要的话(可以使用测地距离)可以同时使用纬度和经度,但这将带来更多的收益。

然后,我们需要重新排列数据,将行从中断点上方移至数据集的末尾(在这种情况下,因为行沿挪威的顺时针方向移动)。

library(tidyverse)
#Find the largest change in latitude
LH %>% 
  group_by(group) %>% 
  mutate(llat = lag(lat), dlat = abs(lat - llat)) %>% 
  ungroup() %>% 
  mutate( n = 1:n()) %>% 
  slice(which.max(dlat))

#re-arrange data
bind_rows(LH %>% slice(-(1:16015)),
      LH %>% slice(1:16015)) %>% 
      ggplot(aes(x = long, y = lat, group=group)) +
      geom_path(size = 1, color = "darkgrey")