Я рисую данные на карте береговой линии с помощью geom_path, и я не могу удалить линию, связывающую первую и последнюю точку данных. Набор данных для этого довольно велик, но его можно найти как здесь.
О проблеме сообщили и исправили на эта ветка, хотя в моем случае это не помогло.
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),]
Что устраняет проблему с линией, но создает другую проблему:

Проблема в том, что ваша материковая группа не начинается на юге и не заканчивается на севере, а начинается к северу от Тронхейма, идет на севере, а затем начинается на юге.
@JonnyPhelps group будет держать остров отдельно от материка
Ах да, я думал, что это всего лишь одна строчка, моя ошибка
@RichardTelford, вы правы и в проблеме, и в географическом районе, молодцы! Я отсортировал свои данные, но, похоже, у меня проблема с фьордами, как показано в редакции. Я попробую твой ответ.





Проблема в том, что ваша материковая береговая линия не начинается с одного конца и продолжается до другого, а начинается где-то посередине.
Первым делом нужно определить скачок. Ниже я определяю его, используя только широту, но и широту, и долготу можно было бы использовать вместе, если необходимо (с геодезическими расстояниями), но это было бы намного больше работы без выгоды.
Затем нам нужно переупорядочить данные, переместив строки сверху разрыва в конец набора данных (в данном случае, потому что строки идут по часовой стрелке вокруг Норвегии).
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. Есть идеи, что может быть причиной? Конфликты между пакетами?
Я думаю, что это именно так, как было заказано.
geom_pathпостроит их в порядке, представленном в строках data.frame. Я не думаю, чтоgroupздесь должен служить какой-либо цели, поскольку вы производите один линейный сегмент. Если возможно, я бы установил порядок строк от начала эскиза страны до конца, а затем использовал бы geom_path без группы. Должно работать нормально