В простом Lat длиной проекции вы используете, расстояния искажаются с широтой, становясь постепенно растягивается по мере приближения к полюсам. На полюсах одна точка растягивается до полной ширины прямоугольной карты. В результате не рекомендуется использовать шкалы на таких картах, потому что их размер будет правильным только на определенной широте и вводит в заблуждение всюду на карте. Мы можем увидеть это в действии, откладывая ряд масштабных баров на разных широтах, чтобы показать, как они различаются по размеру:
ggplot() +
geom_path(data = map_data("world"), aes(long, lat, group = group), color = "grey80") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -80, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -60, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -40, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -20, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 0, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 20, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 40, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 60, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 80, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") +
theme_void()

По этой причине, как правило, рекомендуется использовать координатную сетку, а чем шкалы шкалы на небольших глобальных картах.
ggplot() +
geom_path(data = map_data("world"), aes(long, lat, group = group), color = "black") +
scale_x_continuous(breaks = (-9:9)*20) +
scale_y_continuous(breaks = (-9:9)*10) +
theme_bw() +
theme(panel.grid.major = element_line(colour = 'grey50', size = 0.3, linetype = 3))

Если вы действительно хотите использовать масштабную линейку, вы должны сначала перепроецировать данные (с помощью spTransform
) к проекции равных площадей, для которых расстояния искажаются только минимально или вообще не ,
Шкала масштаба довольно бессмысленна на глобальной карте, нарисованной в лат-длинной проекции, потому что расстояния сильно искажены широтой. лучше было бы нарисовать сетку, которая является предпочтительным методом для таких карт. Если вы действительно хотите шкалу шкалы, то используйте проекцию, которая близко сохраняет расстояния. см., например, https://en.wikipedia.org/wiki/List_of_map_projections – dww
также относится: https://blogs.esri.com/esri/arcgis/2010/04/21/back-to-the-issue-of-scale-bars/ – dww
Да, поэтому я также включил пример Африки вдоль экватора - расстояние, похоже, тоже не соответствует. –