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

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


person geotheory    schedule 31.07.2015    source источник
comment
Можете ли вы привести пример того, как вы делаете карты в базе (т.е. откуда вы получаете данные)?   -  person hrbrmstr    schedule 31.07.2015
comment
Кроме того, по умолчанию 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.   -  person hrbrmstr    schedule 31.07.2015
comment
Пример сюжета plot(state.center$x, state.center$y, asp=1.6)   -  person geotheory    schedule 31.07.2015


Ответы (1)


Если то, что предоставляет 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 и базой).

person hrbrmstr    schedule 31.07.2015
comment
Точно! Немного смущен, зачем нужны вводы долготы, но эй. ggplot(data.frame(state.center)) + geom_point(aes(x=x, y=y)) + coord_fixed(ratio = ar) продемонстрирует, что это точно такой же сюжет - person geotheory; 31.07.2015