【问题标题】:Leaving the path open from geom_path从 geom_path 保持路径打开
【发布时间】:2019-04-25 05:40:41
【问题描述】:

我正在使用 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

我还注意到,在绘制数据子集时,路径可能打开也可能不打开

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

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

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

编辑

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

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

这解决了线路问题,但产生了另一个问题:

【问题讨论】:

  • 我认为这正是它订购的方式。 geom_path 将根据 data.frame 行中显示的顺序绘制它们。我不认为group 应该在这里起到任何作用,因为您正在生产一个线段。如果可能的话,我会设置从国家草图开始到结束的行顺序,然后使用不带组的 geom_path。应该可以正常工作
  • 问题是你的大陆组不是从南开始到北结束,而是从特隆赫姆以北开始,在北边,然后从南边开始。
  • @JonnyPhelps group 将把岛屿与大陆分开
  • 啊对,我还以为只有一行,我错了
  • @RichardTelford 你说得对,地理区域做得好!我确实对我的数据进行了排序,但似乎我对峡湾有问题,如编辑中所示。我会试试你的答案。

标签: r ggplot2 rgdal maptools


【解决方案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")

【讨论】:

  • 到目前为止,我用你的代码得到的结果并没有产生这个烦人的封闭路径,但我仍然对编辑中所示的峡湾感到恼火。
  • 我已更新以提供更简单的答案。为我工作。简单地对数据进行排序是行不通的。
  • 这就像一个魅力,tusen takk @RichardTelford!理想情况下,我会跳过峡湾并在最外层的海岸线上绘制一条路径,以将其用作地图上的叠加层。使用 tidyverse 整理大峡湾的坐标是否是一种简单的方法?我不熟悉它。
  • 可能最容易找到简化地图。
  • 我用完全相同的数据再次尝试了@Richard,但我现在收到以下错误:Error: This function should not be called directly Call rlang::last_error() to see a backtrace。知道可能是什么原因吗?包之间的冲突?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
相关资源
最近更新 更多