Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Получить соотношение сторон для графиков lat-long

Автор вопроса: geotheoryОтветов: 1

Я знаю, что в R есть разные способы правильного построения карт с проекциями. Но только для быстрого "достаточно хорошего" результата с использованием базовых функций, есть ли функция для расчета соотношения сторон для определенной широты, которая, если она будет предоставлена ​​​​типичным аргументам R asp, будет аппроксимировать правильный график? то есть что-то эквивалентное методу coord_quickmap ggplot2. Благодарен за любые предложения.

  • Можете ли вы привести пример того, как вы делаете карты в базе (т.е. откуда вы получаете данные)? hrbrmstr 31.07.2015
  • Кроме того, по умолчанию maps::map будет use a rectangular projection with the aspect ratio chosen so that longitude and latitude scales are equivalent at the center of the picture. Позвольте мне опубликовать пример того, как это в значительной степени эквивалентно coord_quickmap. hrbrmstr 31.07.2015
  • Пример сюжета plot(state.center$x, state.center$y, asp=1.6) geotheory 31.07.2015

rggplot2cartographyaspect-ratio

Ответы

Ответ 1 · рейтинг 7 · hrbrmstr

Если то, что предоставляет coord_quickmap, достаточно близко для вас, вы можете сделать:

library(ggplot2)
library(maps)
library(mapdata)

# shamelessly stolen from coord_quickmap

map_aspect = function(x, y) {
  x.center <- sum(range(x)) / 2
  y.center <- sum(range(y)) / 2
  x.dist <- ggplot2:::dist_central_angle(x.center + c(-0.5, 0.5), rep(y.center, 2))
  y.dist <- ggplot2:::dist_central_angle(rep(x.center, 2), y.center + c(-0.5, 0.5))
  y.dist / x.dist
}

Что сделал бы ggplot:

ggplot(data.frame(state.center)) + geom_point(aes(x=x, y=y)) + coord_quickmap()

То же самое, теперь, в базе:

plot(state.center$x, state.center$y,
     asp=map_aspect(state.center$x, state.center$y))

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы