Установка границ участка в R с соотношением сторон 1


Я пытаюсь построить карту Арктики в Полярной стереографической проекции. Для этого я импортировал уже спроецированный шейп-файл в R с помощью пакета rGDAL:

ds <- readOGR(dsn = path, layer = "10m_coastline_ps")

Это создает SpatialLinesDataFrame. Теперь, когда я строю этот SpatialLinesDataFrame с помощью функции plot(), я не могу установить границы участка с помощью параметров xlim и ylim:

plot(ds, xlim=c(-1700000,1700000), ylim=c(-4000000,800000), axes=T)

Функция plot() автоматически устанавливает соотношение сторон равным 1 и заставляет ограничивать оси (как объяснено в этом посте: оси iG-графа xlim ylim построить неправильно). Это приводит к следующему сюжету:

Введите описание изображения здесь

Я попытался инициализировать экстент графика перед построением пространственного фрейма SpatialLinesDataFrame, как показано ниже:

mapExtentPr <- rbind(c(-1700000,-4000000), c(1700000,800000))
plot(mapExtentPr, pch=NA)
plot(ds, xlim=c(-1700000,1700000), ylim=c(-4000000,800000), axes=T, asp = 1, add=TRUE)
Это устанавливает правильные пределы,но не поддерживает соотношение сторон. Я также попытался использовать функцию clip(), которая не имела никакого эффекта.

Есть ли способ точно установить границы участка при сохранении соотношения сторон 1 (без использования ggplot или spplot)?

Примечание: я уже проверил этот ответ: можно ли изменить ylim и xlim, когда сюжет уже нарисован?

1 2

1 ответ:

В итоге я использовал следующее:

xmin <- -1700000
xmax <- 1700000
ymin <- -4000000
ymax <- 100000

asratio = (ymax-ymin)/(xmax-xmin)

png("greenland_map.png",width=500,height=ceiling(500*asratio))

#plot basemap
plot(ne_10m_coastline_ps,xlim=c(xmin,xmax), ylim=c(ymin,ymax),
     axes=TRUE,asp=1,xaxs="i",yaxs="i")

par(usr=c(xmin,xmax,ymin,ymax))

dev.off()

карта с точными границами оси