Оставляя путь открытым из geom_path - PullRequest
0 голосов
/ 22 ноября 2018

Я строю данные на карте береговой линии, используя geom_path, и не могу удалить линию, связывающую первую и последнюю точку данных.Набор данных для этого довольно большой, но его можно найти здесь .

Проблема была зарегистрирована и исправлена ​​на этой теме , хотя это не помогло в моейcase.

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 читает его?

Edit

Из комментария ниже: я отсортировал данные по широте, чтобы нарисоватьпуть с юга на север:

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

, который решает проблему линии, но создает другую проблему: enter image description here

1 Ответ

0 голосов
/ 22 ноября 2018

Проблема в том, что ваша материковая береговая линия начинается не с одного конца, а с другого, а начинается где-то посередине.

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

Тогда нам нужно перестроить данные, перемещая строки сверху разрыва до конца набора данных (в данном случае, потому что строки идут по часовой стрелке вокруг Норвегии).

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...