Такое поведение вызвано аргументом asp
plot.bathy()
.По умолчанию он установлен как asp = 1
, чтобы гарантировать, что шкалы на обеих осях одинаковы (один градус долготы равен одному градусу широты).Неприятным последствием этого значения по умолчанию являются белые полосы, появляющиеся либо на левой / правой сторонах графика, либо на верхней / нижней сторонах в зависимости от размеров батиметрической карты и устройства построения графика.
ИтакЯ полагаю, у вас есть 2 варианта:
- Если вы не возражаете против слегка искаженной перспективы, вы можете установить
asp = NA
в своем вызове на plot.bathy()
- Если вы хотитечтобы иметь правильное соотношение сторон, но при этом необходимо использовать размер по умолчанию для вашей области печати, вам необходимо загрузить батиметрическую область, которая охватывает всю область построения вашего активного устройства.Например, вы можете вызвать
plot.bathy()
один раз, чтобы создать график «по умолчанию», а затем использовать par("usr")
, чтобы определить пределы батиметрии, необходимые для заполнения всей области построения.Затем вы должны загрузить вторую батиметрию с соответствующими диапазонами по долготе и широте.Что, возможно, нежелательно.
Вот как будет выглядеть код для второго варианта:
atl <- getNOAA.bathy(-80.93645, -41.61417, 30.2, 60.905, resolution = 4)
blues <- colorRampPalette(c("darkblue", "cyan"))
greys <- colorRampPalette(c(grey(0.4), grey(0.99)))
plot(atl, image = TRUE, land = TRUE, n = 0,
bpal = list(c(0, max(atl), greys(100)),
c(min(atl), 0, blues(100))))
coord <- par("usr")
atl2 <- getNOAA.bathy(coord[1], coord[2], coord[3], coord[4], res = 4)
plot(atl2, image = TRUE, land = TRUE, lwd = 0.2,
bpal = list(c(0, max(atl2), greys(100)),
c(min(atl2), 0, blues(100))))
map(database = "state", col = "black", fill = FALSE, add = TRUE)
text(x = state.center$x, y = state.center$y, state.abb, cex = 0.5)
Полагаю, решение, предложенное Романом Луштриком, тоже работает, но неудобно оставлять белые полосы видимыми с обеих сторон графика.
В качестве отступления, если у вас много батиметрических областей дляplot, вам, возможно, следует рассмотреть возможность использования аргумента keep = TRUE
для getNOAA.bathy()
, чтобы избежать запросов к серверам NOAA каждый раз, когда вам необходимо повторно выполнить свой код (и загрузка локальных данных намного быстрее, чем удаленных).И вы также можете загрузить раз и навсегда глобальный 4Go ETOPO1 и использовать subset.bathy()
, чтобы, ну, в общем, поднастроить необходимую вам батиметрию для каждого графика.