Установка границ участка в 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 ответ:
В итоге я использовал следующее:
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()